在条件中声明了varchar

时间:2018-08-02 07:41:31

标签: sql where declare

我想将声明的变量传递到哪里。

例如,我有一个表#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

我该怎么做?

3 个答案:

答案 0 :(得分:1)

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

但是,如果您确实想像您的示例那样做,则可以使用动态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;

如果您需要在脚本中再次使用结果,则将结果放入表变量中;否则,只需EXEC sql

答案 1 :(得分:1)

尝试以下操作:

        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 Server 2014

答案 2 :(得分:1)

创建一个表值用户定义的函数,如下所示。在线有很多示例。

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;