我在sql server中有变量,如
DECLARE @Country varchar(max)
SET @Country='GB,US'
此处国家/地区名称以逗号存储和分隔。我想改变并存储价值 国家/地区变量类似于''GB','US','DE','FR''。
所以我尝试使用像
这样的东西DECLARE @Country varchar(max)
SET @Country='GB,US'
SELECT @Country=STUFF((SELECT ''', ''' + @Country
FOR XML PATH ('')),
1, 2, '')
print @Country
所以请我实现它。如果我可以将“GB”,“US”,“DE”,“FR”这样的国家名称存储到国家/地区变量中,那么我可以发出类似
的查询select * from my table where country in ( @Country)
请帮助谢谢
答案 0 :(得分:3)
你不能这样做,因为@country
仍被视为SQL Server的单个变量,而不是数组(SQL Server中没有数组)。
一些解决方法:
1生成动态SQL
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT * FROM dbo.mytable WHERE country IN (' + CHAR(39)
+ REPLACE(@Country, ',', CHAR(39) + ',' + CHAR(39))
+ CHAR(39) + ');';
2将以逗号分隔的值转储到拆分TVF中(有关方法,请参阅this question,或使用this blog post进行多种方法的性能比较)。
答案 1 :(得分:-2)
或者,如果您不想使用动态代码:
DECLARE @my TABLE (country VARCHAR(2))
INSERT INTO @my
SELECT country FROM (VALUES ('GB'),('US'),('DE'),('FR')) t(country)
DECLARE @Country varchar(max)
SET @Country='GB,US'
SET @Country = CASE WHEN LEFT(@Country, 1) <> ',' THEN ',' ELSE '' END
+ @Country +
CASE WHEN RIGHT(@Country, 1) <> ',' THEN ',' ELSE '' END
SELECT * FROM @my WHERE CHARINDEX(',' + country + ',', @Country) > 0