Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.07 c
4-1147254508
QuickFinder
2006-05-10 13:48
2006.09.03
Определение операционной системы


4-1147446323
Dstr
2006-05-12 19:05
2006.09.03
Как создать форму в отдельном потоке?


2-1155203741
Id
2006-08-10 13:55
2006.09.03
StringGrid


15-1155193418
Чапаев
2006-08-10 11:03
2006.09.03
Программирование мини-АТС


1-1153456424
Fynjy1984_
2006-07-21 08:33
2006.09.03
WebBrowser и TabSheet