首页 > 解决方案 > T-SQL WHERE IN子句:一个参数包含多个INT值会返回类型转换错误

问题描述

我有一个 SP,它通过它的 productid 查找一个产品(只有一个),就像这样(它是查询的一个非常简化的版本)

ALTER PROCEDURE [dbo].[MYSP]
@productid int
AS BEGIN
    SET NOCOUNT ON
    select * from products where productid = @productid
END

EXEC MYSP 10

在某些特殊情况下,我需要提供两个或多个productid,但不允许将多个参数传递给 SP,因此我尝试将参数从 INT 更改为 VARCHAR 并执行以下操作:

ALTER PROCEDURE [dbo].[MYSP]
@productid varchar(10)
AS BEGIN
    SET NOCOUNT ON
    select * from products where productid IN (@productid)
END

EXEC MYSP '10,20,30'

但是它会返回一个转换错误,因为表中的 productid 列是 INT。

有解决方法吗?

谢谢!

标签: sql-servertsqlwhere-clause

解决方案


推荐阅读