Установить значение переменной в массив строк - PullRequest
11 голосов
/ 02 декабря 2011

Я хочу установить переменную как строку значений. Э.Г.

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

SELECT * 
FROM Accounts
WHERE FirstName in (@FirstName)

Я получаю синтаксическую ошибку в строке select @FirstName = 'John','Sarah','George':

Incorrect syntax near ','

Есть ли способ установить переменную со многими значениями?

Ответы [ 3 ]

29 голосов
/ 21 ноября 2013
declare  @tab table(FirstName  varchar(100))
insert into @tab   values('John'),('Sarah'),('George')

SELECT * 
FROM @tab
WHERE 'John' in (FirstName)
7 голосов
/ 02 декабря 2011

Вы пытаетесь присвоить три отдельных строковых литерала одной строковой переменной. Допустимая строковая переменная будет 'John, Sarah, George'. Если вы хотите встроить одинарные кавычки между двойными кавычками, вы должны их избежать.

Кроме того, ваш фактический SELECT не будет работать, потому что базы данных SQL не будут анализировать строковую переменную в отдельных литеральных значениях. Вместо этого вам нужно использовать динамический SQL, а затем выполнить этот динамический оператор SQL. (Поищите на этом сайте dynamic SQL, используя ядро ​​базы данных, которое вы используете в качестве темы (как в [sqlserver] dynamic SQL), и вы должны получить несколько примеров.)

5 голосов
/ 17 апреля 2015
-- 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...