我想将变量设置为值字符串。 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 ','
有什么办法可以设置多个值的变量吗?
答案 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, ','))