Форум: "Базы";
Текущий архив: 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