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

Откуда:
Сообщений: 67
Уважаемые, подскажите пожалуйста. Почему у меня опция set nocount on сбрасывает @@rowcont в триггере в 0, это так должно быть?
create table a(id int, name varchar(10))
go

create trigger a_update on a
for update
as
begin
	set nocount on	

	if @@rowcount = 0 return
	
	if exists(select 1 from inserted i join deleted d on i.id = d.id and i.name <> d.name)
		begin
			raiserror('abort update', 16, 1)
			rollback transaction
			return
		end
end
go

insert into a(id, name) values(1,'a')
go
update a set name = 'b' where id = 1
go
drop table a
go

если в этом примере закоментировать set nocount on то триггер отрабатывает, иначе вылетает с триггера на первом If
23 фев 18, 08:26    [21213218]     Ответить | Цитировать Сообщить модератору
 Re: set nocount on и @@rowcount  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Bekzod,
эти проклятые хелпы, никогда не читайте их, ну хотя бы до обеда
автор
Statements such as USE, SET <option>, DEALLOCATE CURSOR, CLOSE CURSOR, BEGIN TRANSACTION, or COMMIT TRANSACTION reset the ROWCOUNT value to 0.
23 фев 18, 08:40    [21213229]     Ответить | Цитировать Сообщить модератору
 Re: set nocount on и @@rowcount  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
ну и более правилная проверка
IF NOT EXISTS (SELECT 1 FROM INSERTED) RETURN;
23 фев 18, 08:42    [21213231]     Ответить | Цитировать Сообщить модератору
 Re: set nocount on и @@rowcount  [new]
Bekzod
Member

Откуда:
Сообщений: 67
TaPaK
Bekzod,
эти проклятые хелпы, никогда не читайте их, ну хотя бы до обеда
автор
Statements such as USE, SET <option>, DEALLOCATE CURSOR, CLOSE CURSOR, BEGIN TRANSACTION, or COMMIT TRANSACTION reset the ROWCOUNT value to 0.


оуу, вот оно что

TaPaK
ну и более правилная проверка
IF NOT EXISTS (SELECT 1 FROM INSERTED) RETURN;


понадеялся на @@rowcount млин)) да останусь на этом варианте. Спасибо))
23 фев 18, 08:50    [21213240]     Ответить | Цитировать Сообщить модератору
 Re: set nocount on и @@rowcount  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Bekzod,

@@ROWCOUNT не удачный выбор при использовании MERGE, так что на выбор ну и естественно 1й инструкцией, SET NOCOUNT ON можно и потом
23 фев 18, 08:55    [21213246]     Ответить | Цитировать Сообщить модератору
 Re: set nocount on и @@rowcount  [new]
Bekzod
Member

Откуда:
Сообщений: 67
TaPaK,

В моём случае лучше вообще отказаться от @@rowcount. Процы и триггеры не только я правлю, вдруг кому-то не понравится что set nocount on не в начале и опять 25))
23 фев 18, 09:05    [21213252]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить