положить 2 значения в переменную для кондиционирования SQL Server - PullRequest
1 голос
/ 06 сентября 2011
if(OBJECT_ID('EgTb')is not null)drop table [EgTB];
GO
create table [EgTB](Name varchar(50),country varchar(50))
insert into EgTB values('aaa','sg');
insert into EgTB values('bbb','uk');
insert into EgTB values('ccc','us');
insert into EgTB values('ddd','au');
GO
select * from EgTB;

declare @cou varchar(50), @firstCou varchar(50), @secondCou varchar(50);
set @firstCou='sg';
set @secondCou='uk';
if(@cou is null)
begin
set @cou=@firstCou+','+@secondCou;
end
select * from EgTB where (@cou is null or country in (@cou));
GO
if(OBJECT_ID('EgTb')is not null)drop table [EgTB];
GO

Код выше - тот, который я стимулировал.

есть переменная @cou.

Эта переменная та, где используется.

что я хочу ... если @cou равно нулю, я хочу использовать @firstCou и @secondCou.

Вместо того, чтобы делать where country in (@firstCou,@secondCou)

Я хочу where country in (@cou) с этими двумя значениями переменных в @cou.

потому что реальная вещь - это не 2 дополнительные переменные. Я получу несколько записей и не буду знать фиксированную запись.

Вот почему я хочу использовать IN()

Но моя проблема в том, что когда я добавляю эти 2 значения в @cou, значение @cou становится 'sg,uk' вместо 'sg','uk'.

ожидается, но как я могу сделать так, чтобы оно стало 'sg','uk'

1 Ответ

0 голосов
/ 06 сентября 2011

Нельзя заменить параметры для IN строковым литералом. In принимает в качестве аргумента список выражений или подзапрос.

Вместо этого вы можете использовать табличную переменную с одним столбцом и одной строкой для каждой страны.

declare @cou table(country varchar(50))

Вставьте страны, которые вы ищете, в переменную таблицы и используйте запрос, который выглядит следующим образом.

select *
from EgTB
where country in (select country from @cou)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...