Передача пользовательского параметра таблицы в динамический sql, sp_executesql
Мне нужна помощь с передачей моего параметра "пользовательский тип таблицы" в динамический 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 ответ
Решение
Попробуйте установить @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