Главная страница
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.048 c
1-1153417479
Calibr2
2006-07-20 21:44
2006.09.03
Самоудаление


15-1155274652
Карелин Артем
2006-08-11 09:37
2006.09.03
Как програмно записать в именованную ячейку Екселя?


2-1155386778
apic
2006-08-12 16:46
2006.09.03
Scroll


2-1155496198
vain
2006-08-13 23:09
2006.09.03
Реестр


15-1155158224
Алхимик
2006-08-10 01:17
2006.09.03
Подарок на день рождения