我在使用存储过程搜索并使用 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)
请有人能告诉我这里哪里出错了吗?