问题描述
有一个带有列的表 (Table1
) -> Column1 int,Column2 int,Column3 varchar(128),Column4 char(11)
需要创建一个存储过程,根据输入参数从Table1中获取详细信息。输入参数保存以逗号分隔的值。它必须与 Column1 映射
Create Procedure ProcedureName(@InputParams VARCHAR(MAX))
AS
BEGIN
SELECT Column2,Column3,Column4
FROM Table1
WHERE Column1 IN (@InputParams)
ORDER BY Column2
END
以下语句抛出转换错误
“将 varchar 值 '123、456、789' 转换为数据类型 int 时转换失败。”
EXEC ProcedureName @InputParams = '123,456,789'
将 SELECT 语句转换为动态查询可以正常工作,但我们能否解决静态查询中的转换问题。请帮帮我。
解决方法
嗯,在这种情况下你有几个选择:
- 表值输入参数:为此,您必须创建一个
UDT
(用户定义的表类型)并将其用作stored procedure
的参数。 - 将逗号分隔的输入字符串参数转换为整数,然后在
IN
子句中使用它们。
不确定您的用例,但一般来说,我建议继续使用第一个选项。