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

HL8*_*HL8 13 sql sql-server-2008

我想将变量设置为一串值.例如

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

SELECT * 
FROM Accounts
WHERE FirstName in (@FirstName)
Run Code Online (Sandbox Code Playgroud)

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

Incorrect syntax near ','
Run Code Online (Sandbox Code Playgroud)

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

cod*_*ave 34

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

SELECT * 
FROM @tab
WHERE 'John' in (FirstName)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是选定的答案,因为它确实是OP似乎要求的. (3认同)
  • 2017年,此职位仍然有帮助。我同意,这应该标记为已接受的答案! (2认同)

Ken*_*ite 7

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

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


小智 6

-- 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
Run Code Online (Sandbox Code Playgroud)


小智 6

将 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, ','))
Run Code Online (Sandbox Code Playgroud)