powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / При использовании sp_prepexec триггер не апдейтит значения
5 сообщений из 5, страница 1 из 1
При использовании sp_prepexec триггер не апдейтит значения
    #40008580
G_ROM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!

Столкнулись со следующей ситуацией. Легаси код дергает SQL запросы через конструкцию "exec sp_prepexec", и как мы выяснили, из-за этого триггеры на Update и Insert, которые должны обновить значение в колонках, эти значения не обновляют, хотя сами по себе они срабатывают. Подскажите, с чем может быть такое поведение связано и как это исправить?

Спасибо!
...
Рейтинг: 0 / 0
При использовании sp_prepexec триггер не апдейтит значения
    #40008585
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp_prepexec не причем, изучайте свои триггеры


Код: 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.
27.
28.
29.
create table dbo.t1(f int)
go
create table dbo.t2(f int)
go
create trigger trg_t1_ins on dbo.t1 
for insert 
as
	insert dbo.t2(f)
	select f
	from inserted
go


declare @out int;  
exec sp_prepexec @out output, N'@f int', N'insert dbo.t1(f) values(@f)', @f = 1

exec sp_unprepare @out; 



select *
from dbo.t1


select *
from dbo.t2

drop table dbo.t1
drop table dbo.t2
...
Рейтинг: 0 / 0
При использовании sp_prepexec триггер не апдейтит значения
    #40008591
G_ROM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В триггере есть конструкция получения максимального значения из базы:

Код: sql
1.
SELECT ISNULL(MAX(COLUMN_NAME), 0) FROM [dbo].[TABLE_NAME]



И если делать UPDATE строки через обычный запрос, то этот селект вернет верное значение. Если же делать UPDATE через sp_prepexec, то выводится значение которого вообще нет ни в одной из строк - в нашем случае это 130.
...
Рейтинг: 0 / 0
При использовании sp_prepexec триггер не апдейтит значения
    #40008594
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp_prepexec никак не влияет на вычисления max, min, вызова триггеров и т.п.

ищет ошибку в коде.

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
create table dbo.t1(f int)
go
create table dbo.t2(f int)
go
create trigger trg_t1_ins on dbo.t1 
for insert 
as
	insert dbo.t2(f)
	select max(f)
	from dbo.t1
go


declare @out int;  
exec sp_prepexec @out output, N'@f int', N'insert dbo.t1(f) values(@f)', @f = 2

exec sp_unprepare @out; 

set @out = null

exec sp_prepexec @out output, N'@f int', N'insert dbo.t1(f) values(@f)', @f = 1

exec sp_unprepare @out; 



select *
from dbo.t1


select *
from dbo.t2

drop table dbo.t1
drop table dbo.t2
...
Рейтинг: 0 / 0
При использовании sp_prepexec триггер не апдейтит значения
    #40008597
G_ROM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, ты прав. похоже нашли проблему. Спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / При использовании sp_prepexec триггер не апдейтит значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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