SQL Server 中带有 IN 和输入变量的 SELECT 语句

问题描述

一个带有列的表 (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 语句转换为动态查询可以正常工作,但我们能否解决静态查询中的转换问题。请帮帮我。

解决方法

嗯,在这种情况下你有几个选择:

  1. 表值输入参数:为此,您必须创建一个 UDT(用户定义的表类型)并将其用作 stored procedure 的参数。
  2. 将逗号分隔的输入字符串参数转换为整数,然后在 IN 子句中使用它们。

不确定您的用例,但一般来说,我建议继续使用第一个选项。