在 where 条件下声明 varchar

Declared varchar in where condition

我想将声明的变量传递给where。

例如我有一个 table #test:

ID Amount
1  100
2  50
3  20
4  40 
5  150

我想做这样的事情:

declare @id varchar(11) = '(1, 4, 5)'
select * from #test where IDNumber  in @id

我该怎么做?

如评论中所述,您最好使用其他数据类型。

但是如果你真的想像你的例子那样做,你可以使用动态 sql:

DECLARE @ids VARCHAR(32) = '1,4,5';
DECLARE @result TABLE (ID INT, Amount INT);

DECLARE @sql NVARCHAR(MAX) = 
N'  SELECT ID, Amount
    FROM #test
    WHERE ID IN (' + @ids + ');';

PRINT @sql;

INSERT @result
EXEC(@sql);

SELECT*
FROM @result;

如果您需要在脚本中再次使用它们,结果将被放入 table 变量中,否则您可以 EXEC sql

尝试以下操作:

        declare @id varchar(11) = '(1, 4)'
        declare @sql nvarchar(max)
        set @sql='select * from TABLE_NAME where id  in '+ @id
        EXEC sp_sqlexec @sql

SQL 服务器 2014

创建一个 table 值的用户定义函数,如下所示。网上有很多例子。

Convert comma separated list to Table valued function

与动态 sql 代码相比,这将为您提供更好的结果和更好的方法。

一旦你有了函数 dbo.split(@string NVARCHAR(4000),',') 然后在 JOIN 中使用它们,如下所示。

declare @id varchar(11) = '1, 4, 5'
select t.* from #test as t
JOIN dbo.Split(@id,',') AS csv
ON t.id = csv.data;