Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / set nocount on и @@rowcount / 6 сообщений из 6, страница 1 из 1
23.02.2018, 08:26
    #39606441
Bekzod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set nocount on и @@rowcount
Уважаемые, подскажите пожалуйста. Почему у меня опция set nocount on сбрасывает @@rowcont в триггере в 0, это так должно быть?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
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
...
Рейтинг: 0 / 0
23.02.2018, 08:40
    #39606443
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set nocount on и @@rowcount
Bekzod,
эти проклятые хелпы, никогда не читайте их, ну хотя бы до обеда
авторStatements such as USE, SET <option>, DEALLOCATE CURSOR, CLOSE CURSOR, BEGIN TRANSACTION, or COMMIT TRANSACTION reset the ROWCOUNT value to 0.
...
Рейтинг: 0 / 0
23.02.2018, 08:42
    #39606444
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set nocount on и @@rowcount
ну и более правилная проверка
Код: sql
1.
IF NOT EXISTS (SELECT 1 FROM INSERTED) RETURN;
...
Рейтинг: 0 / 0
23.02.2018, 08:50
    #39606445
Bekzod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set nocount on и @@rowcount
TaPaKBekzod,
эти проклятые хелпы, никогда не читайте их, ну хотя бы до обеда
авторStatements such as USE, SET <option>, DEALLOCATE CURSOR, CLOSE CURSOR, BEGIN TRANSACTION, or COMMIT TRANSACTION reset the ROWCOUNT value to 0.

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

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



понадеялся на @@rowcount млин)) да останусь на этом варианте. Спасибо))
...
Рейтинг: 0 / 0
23.02.2018, 08:55
    #39606446
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set nocount on и @@rowcount
Bekzod,

@@ROWCOUNT не удачный выбор при использовании MERGE, так что на выбор ну и естественно 1й инструкцией, SET NOCOUNT ON можно и потом
...
Рейтинг: 0 / 0
23.02.2018, 09:05
    #39606449
Bekzod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
set nocount on и @@rowcount
TaPaK,

В моём случае лучше вообще отказаться от @@rowcount. Процы и триггеры не только я правлю, вдруг кому-то не понравится что set nocount on не в начале и опять 25))
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / set nocount on и @@rowcount / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]