SQL Server запустить SELECT для каждого в списке - PullRequest
0 голосов
/ 18 октября 2019

Я не удивлюсь, если SQL просто так не будет работать, но:

Если мы выполним два оператора SELECT в запросе, мы получим разделенную панель «Результаты». Мне интересно, могу ли я добавить переменные в список, и тогда количество разделений на панели результатов будет соответствовать длине этого списка.

Если бы я смешивал языки:

id_list = [26275, 54374, 84567]
for i in id_list:
    SELECT * FROM table WHERE id = i

Я просто пытаюсь легко сравнить результаты запроса, сохраняя отдельные группы, с изменяющимся числом переменных. Поскольку циклы никогда не кажутся ответом в SQL, я был бы так же рад вставить что-то вроде пустой строки или горизонтального правила и т. Д. Не уверен, что это возможно, хотя ...

Ответы [ 3 ]

2 голосов
/ 18 октября 2019

В T-SQL отсутствует понятие "списки" (как отдельная структура данных). Делает ли это то, что вы хотите?

SELECT *
FROM table
WHERE id IN (26275, 54374, 84567);
0 голосов
/ 19 октября 2019

Вы можете использовать UNION ALL:

SELECT * FROM table WHERE id = 26275
UNION ALL
SELECT * FROM table WHERE id = 54374
UNION ALL
SELECT * FROM table WHERE id = 84567
0 голосов
/ 18 октября 2019
declare @i int = 0;
declare @Id int;
declare @Ids table (Id int);
insert @Ids select Id from (values (26275), (54374), (84567)) t(Id);
-- OR: insert @Ids select * from string_split('26275, 54374, 84567', ',');
declare @Count int = (select count(*) from @Ids);

while @i <  @Count
begin   
    select @Id = Id, @i = @i + 1 
    from @Ids order by Id 
    offset @i rows fetch next 1 rows only;

    select * from dbo.MyTable where Id = @Id;
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...