【发布时间】:2011-07-06 06:45:17
【问题描述】:
我有一个存储过程
Create PROCEDURE abc
@sRemovePreviouslySelectedWhereClause nvarchar(max)
AS
BEGIN
SELECT *
FROM table
WHERE nId NOT IN (@sRemovePreviouslySelectedWhereClause)
END;
参数@sRemovePreviouslySelectedWhereClause 可以具有类似 0,1 的值。但这失败并显示错误消息:
将 nvarchar 值“0,1”转换为数据类型 int 时转换失败。
除了动态查询还有其他方法可以实现吗?
【问题讨论】:
-
据我所知,没有任何供应商支持使用变量为 IN/NOT IN 子句提供逗号分隔列表的 SQL。使用动态 SQL,或将值列表转换为表值函数/等以进行比较。
-
这是最常见的问题之一。您会在 SO 上找到许多重复项(或非常接近的问题)。
标签: sql sql-server tsql