Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сравнить результаты 2 запросов  [new]
Владимир Ш.
Member

Откуда: г. Москва
Сообщений: 32
Есть 2 запроса:

declare @CGID1 int = ...;
declare @CGID2 int = ...;

select OE_ID from CER where Cg_ID = @CGID1 order by OE_ID;
select OE_ID from CER where Cg_ID = @CGID2 order by OE_ID;

Все поля типа int.

Необходимо сравнить результаты этих запросов на идентичность.

Как это можно сделать, не используя курсор?

Кол-во строк возвращаемое запросами варируется от 10 до 50 записей.

ps. Результаты запросов являются идентичными если:
1) кол-во строк совпадает (впрочем это условие проверить нетрудно);
2) каждая строка одного запроса совпадает со строкой другого запроса.
3 мар 03, 18:22    [138946]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2 запросов  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Попробуй FULL OUTER JOIN эти два запроса.
И если существуют записи, у которых OE_ID из первого запроса IS NULL или OE_ID из второго запроса IS NULL, то наборы не совпадают.

Ну типа

IF EXISTS(SELECT *

FROM
(select OE_ID from CER where Cg_ID = @CGID1 order by OE_ID) AS Q1
FULL OUTER JOIN
(select OE_ID from CER where Cg_ID = @CGID2 order by OE_ID) AS Q2
WHERE
(Q1.OE_ID IS NULL) OR (Q2.OE_ID IS NULL)) BEGIN
--обработка при неидентичности набора


END
3 мар 03, 18:41    [138970]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2 запросов  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Пардонте, on забыл написать:

IF EXISTS(SELECT *

FROM
(select OE_ID from CER where Cg_ID = @CGID1 order by OE_ID) AS Q1
FULL OUTER JOIN
(select OE_ID from CER where Cg_ID = @CGID2 order by OE_ID) AS Q2
ON Q1.OE_ID = Q2.OE_ID
WHERE
(Q1.OE_ID IS NULL) OR (Q2.OE_ID IS NULL)) BEGIN
--обработка при неидентичности набора


END
3 мар 03, 18:43    [138978]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить результаты 2 запросов  [new]
PeterSV
Member

Откуда: Minsk
Сообщений: 174
Можно запихнуть это во временные таблицы и сравнить потом:
DECLARE @CGID1_TABLE TABLE ( [key] int identity, [oe_id] int )
DECLARE @CGID1_TABLE TABLE ( [key] int identity, [oe_id] int )

INSERT INTO @CGID1_TABLE (oe_id)
select OE_ID from CER where Cg_ID = @CGID1 order by OE_ID
INSERT INTO @CGID2_TABLE (oe_id)
select OE_ID from CER where Cg_ID = @CGID2 order by OE_ID

if EXISTS (
SELECT * FROM @CGID1_TABLE a, @CGID2_TABLE b
WHERE a.[key] = b.[key] AND a.[oe_id] <> b.[oe_id]
)

Немного громоздко, но без курсоров. Подойдет?
3 мар 03, 18:49    [138984]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить