我在使用存储过程搜索并返回匹配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 不能将逗号分隔的字符串隐式转换为一组值。 - Tim Lehner