设置具有多个值的变量并使用IN关键字。
设置具有多个值的变量并使用IN关键字。
这个问题已经在此处有了答案:
可能是重复的:
在 SQL Server 中我想做类似这样的事情...
DECLARE @Values varchar(1000) SET @Values = 'A, B, C' SELECT blah FROM foo WHERE myField IN (@Values)
这是可能的吗?如何实现?
admin 更改状态以发布 2023年5月21日
理想情况下,您根本不应该在T-SQL中拆分字符串。
如果不能改变这种情况,在SQL Server 2016之前的旧版本中,可以创建一个拆分函数:
CREATE FUNCTION dbo.SplitStrings ( @List nvarchar(max), @Delimiter nvarchar(2) ) RETURNS TABLE WITH SCHEMABINDING AS RETURN ( WITH x(x) AS ( SELECT CONVERT(xml, N'' + REPLACE(@List, @Delimiter, N'') + N' ') ) SELECT Item = LTRIM(RTRIM(i.i.value(N'.',N'nvarchar(max)'))) FROM x CROSS APPLY x.nodes(N'//root/i') AS i(i) ); GO
现在您可以这样说:
DECLARE @Values varchar(1000); SET @Values = 'A, B, C'; SELECT blah FROM dbo.foo INNER JOIN dbo.SplitStrings(@Values, ',') AS s ON s.Item = foo.myField;
在SQL Server 2016或更高版本(或Azure SQL数据库)中,这更简单和更有效,但是您必须手动应用LTRIM()
以去除任何前导空格:
DECLARE @Values varchar(1000) = 'A, B, C'; SELECT blah FROM dbo.foo INNER JOIN STRING_SPLIT(@Values, ',') AS s ON LTRIM(s.value) = foo.myField;