将变量值设置为字符串数组

时间:2011-12-01 23:36:12

标签: sql sql-server-2008

我想将变量设置为值字符串。 E.g。

declare @FirstName char(100)
select @FirstName = 'John','Sarah','George'

SELECT * 
FROM Accounts
WHERE FirstName in (@FirstName)

我在行select @FirstName = 'John','Sarah','George'中收到语法错误:

Incorrect syntax near ','

有什么办法可以设置多个值的变量吗?

5 个答案:

答案 0 :(得分:27)

declare  @tab table(FirstName  varchar(100))
insert into @tab   values('John'),('Sarah'),('George')

SELECT * 
FROM @tab
WHERE 'John' in (FirstName)

答案 1 :(得分:7)

您正在尝试将三个单独的字符串文字分配给单个字符串变量。有效的字符串变量为'John, Sarah, George'。如果你想在双引号之间嵌入单引号,你必须将它们转义。

此外,您的实际SELECT将不起作用,因为SQL数据库不会将字符串变量解析为单个文字值。您需要使用动态SQL,然后执行该动态SQL语句。 (在dynamic SQL搜索此站点,使用您正在使用的数据库引擎作为主题(如在[sqlserver] dynamic SQL中),您应该得到几个示例。)

答案 2 :(得分:5)

-- create test table "Accounts"
create table Accounts (
  c_ID int primary key
 ,first_name varchar(100)
 ,last_name varchar(100)
 ,city varchar(100)
 );

insert into Accounts values (101, 'Sebastian', 'Volk', 'Frankfurt' );
insert into Accounts values (102, 'Beate',  'Mueller', 'Hamburg' );
insert into Accounts values (103, 'John',  'Walker', 'Washington' );
insert into Accounts values (104, 'Britney', 'Sears', 'Holywood' );
insert into Accounts values (105, 'Sarah', 'Schmidt', 'Mainz' );
insert into Accounts values (106, 'George', 'Lewis', 'New Jersey' );
insert into Accounts values (107, 'Jian-xin', 'Wang', 'Peking' );
insert into Accounts values (108, 'Katrina', 'Khan', 'Bolywood' );

-- declare table variable
declare @tb_FirstName table(name varchar(100));
insert into  @tb_FirstName values ('John'), ('Sarah'), ('George');

SELECT * 
FROM Accounts
WHERE first_name in (select name from @tb_FirstName);

SELECT * 
FROM Accounts
WHERE first_name not in (select name from @tb_FirstName);
go

drop table Accounts;
go

答案 3 :(得分:0)

SQL中不能有变量数组。
但是,最好的替代解决方案是使用temporary table

答案 4 :(得分:0)

将 varchar 变量转换为表(值数组)的一种快速方法是首先将 FirstName 变量作为一个整体 varchar,然后使用 STRING_SPLIT 方法。

declare @FirstName varchar(100)
select @FirstName = 'John,Sarah,George'

SELECT * 
FROM Accounts
WHERE FirstName in (SELECT * FROM STRING_SPLIT(@FirstName, ','))