Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
ограничить объем
Guest |
Как ограничить объем генерируемых изменений одной транзакцией, чтобы при его привышении она автоматически откатывалась? |
19 авг 12, 15:50 [13033322] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
Автоматически - никак. Считайте, сколько данных в транзакции модифицировали, если превысили - rollback. |
19 авг 12, 15:52 [13033327] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
set rowcount nnn
Не совсем полное щастье, но максимум доступного. |
19 авг 12, 16:16 [13033385] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
К примеру: UPDATE Top(1001) T SET Col = <Expr> FROM dbo.SomeTable WHERE <Filter> IF (@@RowCount > 1000) BEGIN ROLLBACK RAISERROR('Слишком много данных для изменения',18,1) RETURN @@Error END |
||
20 авг 12, 02:45 [13034832] Ответить | Цитировать Сообщить модератору |
Александр Бердышев Member Откуда: Санкт-Петербург Сообщений: 382 |
UPDATE Top(1001) T SET Col = <Expr> FROM dbo.SomeTable WHERE <Filter> Передвнесеием изменений можно проверить, сколько данных удовлетворяют условию, и начинать вносить изменения только тогда, когда количество записей Вам подходит: IF (SELECT COUNT(T) FROM dbo.SomeTable WHERE <Filter>) < @Num BEGIN UPDATE Top(1001) T SET Col = <Expr> FROM dbo.SomeTable WHERE <Filter> END ELSE BEGIN ROLLBACK RAISERROR('Слишком много данных для изменения',18,1) RETURN @@Error END |
20 авг 12, 15:17 [13037518] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Александр Бердышев, в вашем примере не эффективно - 2 раза пробегаться, более того, может дать разный результат - т.е. банально нарушаете принцип указанного IL. Но если заранее известно (к примеру по @@RowCount с предыдущей команды или с клиента приходит ...) то естественно лучше заранее проверить. Если эта "ошибка" срабатывает редко (в одном случае из 100, к примеру), то у вас нагрузка увеличится где-то в 2 попугая раз, из-за принудительного лишнего чтения. |
20 авг 12, 21:57 [13039696] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |