在 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;
我想将声明的变量传递给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;