sql - 将用户定义的表参数传递给动态 sql sp_executesql

标签 sql parameters 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”

我无法让它工作,也无法通过合并(对于 bigint)获得解决方法,因为结果将超过 8000 个字符。

最佳答案

尝试设置 @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

关于sql - 将用户定义的表参数传递给动态 sql sp_executesql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7999415/

相关文章:

parameters - 使用全局设置作为属性参数

sql-server - 如何使用表名的同义词通过链接服务器截断表?

sql - 如何对 PostgreSQL 主 ID 列执行 LIKE 查询?

php - 使用 php 添加按钮

MySQL 子查询作为表(用于多列返回)

java - GWT:在函数中包含未定义的类参数

mysql - 在不使用存储过程的情况下循环 n 次

python - 参数数量变化的多项式函数

sql-server - 如何在 sp_executesql 中使用 OPENQUERY?

sql - 复杂的 sp_executesql - 容易受到注入(inject)?