使用单引号sql server环绕数据

时间:2012-02-17 13:49:48

标签: sql-server

我在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)

请帮助谢谢

2 个答案:

答案 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