Я пытаюсь выяснить, как создать переменную в Sql Server, которая содержит массив значений, поиск здесь, в стеке, но ничего непоследовательного ... вот как я себе это представлял:

declare @partners as nvarchar(max) = ('partner1','partner2');

select * from partners
where partner in (@partners);

Возможно ли это в SQL Server? Как?

Спасибо!

0
jvbs 19 Окт 2017 в 12:54

3 ответа

Лучший ответ

Вы можете сделать это с таблицей

declare @partnersList as table(partnerName  varchar(100))
insert into @partnersList values('partner1'),('partner2')

SELECT * 
FROM partners
WHERE 'partner' in (SELECT partnerName FROM @partnersList)
4
Elizaveta 19 Окт 2017 в 10:00

Вы не можете сделать это, но вы можете использовать переменную таблицы, чтобы получить то же поведение:

declare @partners TABLE (
    Name nvarchar(max)
)

INSERT @partners
VALUES
    ('partner1'),
    ('partner2')

select * from partners
where partner in (
    SELECT Name 
    FROM @partners
)
2
Denis Rubashkin 19 Окт 2017 в 10:01

Или вы можете выполнить его как динамический:

declare @partners as nvarchar(max) = ' ''partner1'',''partner2'' '


declare @sql nvarchar(Max)

Set @sql='SELECT * FROM partners WHERE [partner] IN ('+ @partners +')'

exec sp_executesql @sql
2
Valerica 19 Окт 2017 в 10:05