【发布时间】:2013-03-25 13:14:38
【问题描述】:
我在使用存储过程搜索并使用 SQL IN 运算符返回匹配 ID 列表时遇到了一些问题。我认为这个问题与数据类型有关。
一个参数作为字符串'32,1,5,78,43'传递给存储过程 - 这需要作为 IN 运算符传递到查询中以搜索字段 Column1。 Bigint 中该字段的数据类型。
DECLARE @TEST varchar(1000)
SET @TEST = REPLACE('32,1,5,78,43', '''','')
SELECT Column1, Column2
FROM Table
WHERE Column1 IN(@TEST)
尝试从字符串中删除引号似乎不起作用,并且我收到一条错误消息“将数据类型 varchar 转换为 bigint 时出错。”
在没有存储过程的情况下运行代码,并将值直接放入 IN 运算符(不带引号)然后可以正常工作并返回正确的值。例如
SELECT Column1, Column2
FROM Table
WHERE Column1 IN(32,1,5,78,43)
请有人告诉我这里哪里出错了?
【问题讨论】:
-
这里的答案非常好,但您应该知道您的查询无法正常工作的原因是您的
IN与一个字符串而不是一组整数进行比较。 SQL Server 不能将逗号分隔的字符串隐式转换为一组值。
标签: sql sql-server tsql