Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / При использовании sp_prepexec триггер не апдейтит значения / 5 сообщений из 5, страница 1 из 1
14.10.2020, 18:10
    #40008580
G_ROM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании sp_prepexec триггер не апдейтит значения
Всем доброго дня!

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

Спасибо!
...
Рейтинг: 0 / 0
14.10.2020, 18:20
    #40008585
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании sp_prepexec триггер не апдейтит значения
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
14.10.2020, 18:45
    #40008591
G_ROM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании sp_prepexec триггер не апдейтит значения
В триггере есть конструкция получения максимального значения из базы:

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



И если делать UPDATE строки через обычный запрос, то этот селект вернет верное значение. Если же делать UPDATE через sp_prepexec, то выводится значение которого вообще нет ни в одной из строк - в нашем случае это 130.
...
Рейтинг: 0 / 0
14.10.2020, 18:51
    #40008594
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании sp_prepexec триггер не апдейтит значения
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
14.10.2020, 19:08
    #40008597
G_ROM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При использовании sp_prepexec триггер не апдейтит значения
Да, ты прав. похоже нашли проблему. Спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / При использовании sp_prepexec триггер не апдейтит значения / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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