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

Откуда: Кр-ск
Сообщений: 3480

IF EXISTS(SELECT * FROM inserted)
SELECT * FROM inserted i
LEFT OUTER JOIN deleted d ON i.[id] = d.[id]
ELSE
IF EXISTS(SELECT * FROM deleted)
SELECT * FROM inserted i
RIGHT OUTER JOIN deleted d ON i.[id] = d.[id]


P.S. Хотя, наверное, не такой уж он и сложный...:-)
30 июл 03, 10:02    [280958]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Это что? В триггере на UPDATE проверяется какая операция была проведена? Или это триггер на все изменения? Если так, то не проще ли все же разнести эти триггеры?
30 июл 03, 10:07    [280965]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Это триггер на все изменения. Операцию надо провести независимо от типа триггера, т.е. проверять мне ничего не надо.

В некотором поле deleted содержится старая сумма, в inserted - новая. Надо создать курсор в котором будет поле разницы сумм (inserted.sum - deleted.sum)
Курсор, соответственно должен содержать MAX(select * from inserted, select * from deleted) записей.

P.S. Курсор, потому что структура иерархическая, а рекурсию использовать не хочу.
30 июл 03, 10:17    [280987]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
О, лень людская! И охота задурять мозги разруливанием вида выполненой опреции? Не проще в родных триггерах всё это прописать? Да и пощустрей немного будет (проверки исключаются).
30 июл 03, 10:23    [281001]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Я же пишу: "Операцию надо провести независимо от типа триггера",
т.е. мне совершенно НЕ НУЖНО разруливать вид операции...
30 июл 03, 10:33    [281020]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Тогда пиши весь триггер. if exists, могёт быть, не пригодится.
30 июл 03, 10:54    [281079]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
moonmike
Member

Откуда: Москва
Сообщений: 430
А тут с логикой запроса все в порядке?
Посмотрим:
Если существует хоть одна строка в inserted то:
......
В противном случае:
Если существует хоть одно строка в deleted то:
Выбрать все из inserted
....
Вот это то меня и смущает, ведь мы уже убедились что в inserted ничего не существует.
30 июл 03, 11:30    [281161]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
2moonmike:
Надо так:
a)
table deleted:
id name
0 a
1 b
2 c

table inserted - empty

b)
table inserted:
id name
0 a
1 b
2 c

table deleted - empty

c)
table deleted:
id name
0 a
1 b
2 c

table inserted:
id name
0 aaa
1 bbb
2 ccc

result set:
a)
NULL NULL 0 a
NULL NULL 1 b
NULL NULL 2 c
b)
0 a NULL NULL
1 b NULL NULL
2 c NULL NULL
c)
0 a 0 aaa
1 b 1 bbb
2 c 2 ccc
30 июл 03, 11:52    [281228]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
неважно кто
Guest
А так разве не подходит?

SELECT * FROM inserted i

FULL OUTER JOIN deleted d ON i.[id] = d.[id]
30 июл 03, 11:53    [281232]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
full outer join не пробовал?
30 июл 03, 11:54    [281234]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
2неважно кто:
Это как раз то, что нужно. Спасибо.

2All: Буду учиться объяснять понятнее...:-)
30 июл 03, 11:56    [281241]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли упростить такой запрос?  [new]
moonmike
Member

Откуда: Москва
Сообщений: 430
Да тут не в объяснениях дело, тут дело в правильном взгляде на проблему.
Слава богу что всего за 11 сообщений до сего взгляда добрались=)
30 июл 03, 12:13    [281295]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить