Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];

Вниз

Использование параметров в кач-ве имени таблицы   Найти похожие ветки 

 
Megabyte ©   (2006-06-22 12:38) [0]

CREATE PROCEDURE [dbo].[Add_rule]
@log varchar(20),
@kind varchar(20),
@type int,
@item varchar(50)
AS
declare @item_key int

select IdKey
from @kind
       where Description = @item
       ...
GO

Ругается, говорит: Error 137: Must declare the variable "@kind"
Можно ли вообще использовать параметры в качестве имени таблицы?
Когда пишу туда конкретное имя, то не ругается.


 
sniknik ©   (2006-06-22 12:46) [1]

> Можно ли вообще использовать параметры в качестве имени таблицы?
нет. но можно составить запрос динамически... для примера

DECLARE @Name VarChar(30)
DECLARE @Sql VarChar(300)

SET @Name = "TableName"
SET @Sql = "SELECT * FROM "+@Name

Exec(@Sql)


тут можно имя и из параметра брать


 
Megabyte ©   (2006-06-22 14:26) [2]

Спасибо.


 
paul_k ©   (2006-06-22 15:22) [3]

В таком варианте возможны грабли с правами на доступ к таблице


 
Megabyte ©   (2006-06-22 15:36) [4]

Дабы не плодить темы, спрошу здесь:
CREATE PROCEDURE [dbo].[Add_rule]
@log varchar(20),
@kind varchar(20),
@type int,
@item varchar(50)
AS
declare @item_key int
declare @akind varchar(20)
declare @sql varchar(100)
set @akind = @kind
--добавление разрешения на вывод отчета по одному объекту
set @sql = "select IdKey from " + @akind + " where Description = " + @item + " into " + @item_key
exec(@sql)
insert into Access_fin(Login, Type, Item)
values(@log, @type, @item_key)
GO

Это полный код ХП. Делаю селект, чтобы получит значение IdKey. Мне надо присвоить результат запроса переменной @item_key.
Ошибка странная: ошибка конвертирования значения типа Varchar "select IdKey from " + @akind + " where Description = " + "мое конкретное значение" в @item_key  типа int.
Объясните, почему результат запроса имеет тип Varchar, если поле IdKey имеет тип int?
Я так понимаю, что это связано с подобным способом формирования запроса.
Т.е. надо использовать конвертирование формата?


 
Ega23 ©   (2006-06-22 15:44) [5]

set @sql = "select IdKey from " + @akind + " where Description = " + @item + " into " + Cast(@item_key as varchar(10))

Только, дружище, всё равно это туфта


 
Ega23 ©   (2006-06-22 15:49) [6]


 Declare @NaSQL nvarchar(4000);

Select @NaSQL=Cast(("Select @Item_key=IdKey from "+@akind+" where Description=@item") as nvarchar(4000));

execute sp_executesql @NaSQL,
    N"@Item_key int output, @item int",
    @ObjID output, @item;


Вроде так...


 
Megabyte ©   (2006-06-22 17:29) [7]

CREATE PROCEDURE [dbo].[Add_rule]
@log varchar(20),
@kind varchar(20),
@type int,
@item varchar(50)
AS
declare @item_key int
declare @akind varchar(20)
declare @aitem varchar(50)
declare @SQL nvarchar(400)
--добавление разрешения на вывод отчета по одному объекту
select @SQL = N"Select @item_key = IdKey from @akind where Description = @aitem"
execute sp_executesql @SQL,
    N"@Item_key int output,  @akind varchar(20), @item varchar(50)",
@item_key output, @kind, @item;
insert into Access_fin(Login, Type, Item)
values(@log, @type, @item_key)
GO

Разобрался вроде с sp_executesql
Опять та же фигня, только ошибка выскакивает не на этапе построения ХП, а на этапе запуска: Must declare the variable "@akind"


 
sniknik ©   (2006-06-22 17:47) [8]

так ты 100% тоже самое, тот же параметр, в динамический запрос передал... а имя таблици параметром быть не может, для того и делалось формирование динамически чтобы подставить значение парамета с именем, а не опять параметр...
....
select @SQL = N"Select @item_key = IdKey from "+@akind+" where Description = @aitem"
execute sp_executesql @SQL,
   N"@Item_key int output,  @item varchar(50)",
....


 
Megabyte ©   (2006-06-22 18:51) [9]

Попробую.


 
Megabyte ©   (2006-06-23 12:44) [10]

Наконец-то разобрался. %)
@aitem тоже пришлось вынести как параметр самой проыедуры, а не динамического запроса.
Всем спасибо! Узнал много полезных фишек. =)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.052 c
3-1151224583
Chort
2006-06-25 12:36
2006.09.03
Проблема с картинкой


15-1155024974
Курдль
2006-08-08 12:16
2006.09.03
Требуется программа-объединитель для Excell


2-1155213598
o_serg
2006-08-10 16:39
2006.09.03
Ужасное моргание при изменении размера окна


2-1155750524
pvi
2006-08-16 21:48
2006.09.03
CreateRemoteComObject


15-1154692230
grisme
2006-08-04 15:50
2006.09.03
Базовые зниния C++





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский