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)
您正在尝试将三个单独的字符串文字分配给单个字符串变量.一个有效的字符串变量'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)