Передача пользовательского параметра таблицы в динамический sql, sp_executesql - PullRequest
6 голосов
/ 03 ноября 2011

Мне нужна помощь с передачей моего параметра "пользовательский тип таблицы" в динамический sql, sp_executesql.

Вот мой пример кода:

DECLARE  @str as nvarchar(Max)
DECLARE @IDLIST AS  ListBigintType  /* this is my table type, with ItemId column (bigint)*/

INSERT INTO @IDLIST

SELECT DISTINCT bigintid FROM tableWithBigInts WITH(NOLOCK)


set @str ='select * from SomeTable where ID in (select ItemId from @IdTable) '

EXEC sp_executesql  @str , @ParamDefs, @IdTable = @IDLIST

В нем говорится: необходимо объявить табличную переменную "@IdTable"

Я не могу заставить это работать, и не могу найти обходной путь с coalesce (для bigints), потому что результат будет более 8000 символов.

1 Ответ

8 голосов
/ 03 ноября 2011

Попробуйте установить @ParamDefs в:

EXEC sp_executesql @str , N'@IdTable ListBigintType readonly', @IdTable = @IDLIST

Вот полный рабочий пример:

create type ListBigintType as table (ItemId bigint)
go
declare @t as ListBigintType
insert @t select 6*7

exec sp_executesql 
    N'select ItemId from @IdTable',
    N'@IdTable ListBigintType readonly', @t
...