powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MERGE в триггере?
4 сообщений из 4, страница 1 из 1
MERGE в триггере?
    #40009143
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, подскажите, должен ли работать MERGE внутри триггера? Если да, то в чем ошибка в моём скрипте?

Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER TRIGGER [dbo].[OnBlogs1_Update_Bigint]
   ON [dbo].[Blogs]
   AFTER Update
AS 
BEGIN
SET NOCOUNT ON;
declare @id int, @subtitle_new nvarchar(4000)
select @subtitle_new = Subtitle from inserted
if (@subtitle_new is not NULL)
begin
select * into #t1 from inserted
SET IDENTITY_INSERT dbo.Blogs_bigint ON;  
MERGE dbo.Blogs_bigint AS T_Base
USING #t1 AS T_Source 
ON (T_Base.id = T_Source.id) 
WHEN MATCHED THEN 
UPDATE SET [Id]=T_Source.id
      ,=T_Source.
      ,[Title]=T_Source.[Title]
      ,[Subtitle]=T_Source.[Subtitle]
      ,[CreationDate]=T_Source.[CreationDate]
      ,[LastUpdated]=T_Source.[LastUpdated]
      ,[Timestamp]=T_Source.[Timestamp]
      ,[OwnerId]=T_Source.[OwnerId]
      ,[BlogHostId]=T_Source.[BlogHostId]
      ,[UpdateBlogStatistic]=T_Source.[UpdateBlogStatistic]
      ,[UpdateProfile]=T_Source.[UpdateProfile]
      ,[BlogProcessingState_Id]=T_Source.[BlogProcessingState_Id]
      ,[hash_Url]=T_Source.[hash_Url]
      ,[rep]=T_Source.[rep]
      ,[Version]=T_Source.[Version]
      ,[isEnabled]=T_Source.[isEnabled]
      ,[Type]=T_Source.[Type]
      ,[MassMediaBlogId]=T_Source.[MassMediaBlogId]
      ,[TopLevelDomain]=T_Source.[TopLevelDomain]
      ,[Domain]=T_Source.[Domain]
      ,[IsAd]=T_Source.[IsAd]
      ,[IsVerified]=T_Source.[IsVerified]
WHEN NOT MATCHED THEN
INSERT ([Id]
      ,
      ,[Title]
      ,[Subtitle]
      ,[CreationDate]
      ,[LastUpdated]
      ,[Timestamp]
      ,[OwnerId]
      ,[BlogHostId]
      ,[UpdateBlogStatistic]
      ,[UpdateProfile]
      ,[BlogProcessingState_Id]
      ,[hash_Url]
      ,[rep]
      ,[Version]
      ,[isEnabled]
      ,[Type]
      ,[MassMediaBlogId]
      ,[TopLevelDomain]
      ,[Domain]
      ,[IsAd]
      ,[IsVerified]) 
                 VALUES (T_Source.[Id]
      ,T_Source.
      ,T_Source.[Title]
      ,T_Source.[Subtitle]
      ,T_Source.[CreationDate]
      ,T_Source.[LastUpdated]
      ,T_Source.[Timestamp]
      ,T_Source.[OwnerId]
      ,T_Source.[BlogHostId]
      ,T_Source.[UpdateBlogStatistic]
      ,T_Source.[UpdateProfile]
      ,T_Source.[BlogProcessingState_Id]
      ,T_Source.[hash_Url]
      ,T_Source.[rep]
      ,T_Source.[Version]
      ,T_Source.[isEnabled]
      ,T_Source.[Type]
      ,T_Source.[MassMediaBlogId]
      ,T_Source.[TopLevelDomain]
      ,T_Source.[Domain]
      ,T_Source.[IsAd]
      ,T_Source.[IsVerified]);
SET IDENTITY_INSERT dbo.Blogs_bigint OFF; 
end
drop table #t1
END



В данном виде, данные в таблице dbo.Blogs_bigint не появляются, хотя в таблицу, на которой висит этот триггер данные вносятся и изменяются.
...
Рейтинг: 0 / 0
MERGE в триггере?
    #40009148
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упростил скрипт, что-бы опробовать в студии:
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
select top(1) * into #t1 from Blogans.dbo.Blogs
SET IDENTITY_INSERT dbo.Blogs_bigint ON;  
;MERGE dbo.Blogs_bigint AS T_Base --Целевая таблица
USING #t1 AS T_Source --Таблица источник
ON (T_Base.id = T_Source.id) --Условие объединения
WHEN MATCHED THEN --Если истина (UPDATE)
UPDATE SET [Id]=T_Source.id
      ,=T_Source.
      ,[Title]=T_Source.[Title]
      ,[Subtitle]=T_Source.[Subtitle]
      ,[CreationDate]=T_Source.[CreationDate]
      ,[LastUpdated]=T_Source.[LastUpdated]
      ,[Timestamp]=T_Source.[Timestamp]
      ,[OwnerId]=T_Source.[OwnerId]
      ,[BlogHostId]=T_Source.[BlogHostId]
      ,[UpdateBlogStatistic]=T_Source.[UpdateBlogStatistic]
      ,[UpdateProfile]=T_Source.[UpdateProfile]
      ,[BlogProcessingState_Id]=T_Source.[BlogProcessingState_Id]
      ,[hash_Url]=T_Source.[hash_Url]
      ,[rep]=T_Source.[rep]
      ,[Version]=T_Source.[Version]
      ,[isEnabled]=T_Source.[isEnabled]
      ,[Type]=T_Source.[Type]
      ,[MassMediaBlogId]=T_Source.[MassMediaBlogId]
      ,[TopLevelDomain]=T_Source.[TopLevelDomain]
      ,[Domain]=T_Source.[Domain]
      ,[IsAd]=T_Source.[IsAd]
      ,[IsVerified]=T_Source.[IsVerified]
WHEN NOT MATCHED THEN --Если НЕ истина (INSERT)
INSERT ([Id]
      ,
      ,[Title]
      ,[Subtitle]
      ,[CreationDate]
      ,[LastUpdated]
      ,[Timestamp]
      ,[OwnerId]
      ,[BlogHostId]
      ,[UpdateBlogStatistic]
      ,[UpdateProfile]
      ,[BlogProcessingState_Id]
      ,[hash_Url]
      ,[rep]
      ,[Version]
      ,[isEnabled]
      ,[Type]
      ,[MassMediaBlogId]
      ,[TopLevelDomain]
      ,[Domain]
      ,[IsAd]
      ,[IsVerified]) 
                 VALUES (T_Source.[Id]
      ,T_Source.
      ,T_Source.[Title]
      ,T_Source.[Subtitle]
      ,T_Source.[CreationDate]
      ,T_Source.[LastUpdated]
      ,T_Source.[Timestamp]
      ,T_Source.[OwnerId]
      ,T_Source.[BlogHostId]
      ,T_Source.[UpdateBlogStatistic]
      ,T_Source.[UpdateProfile]
      ,T_Source.[BlogProcessingState_Id]
      ,T_Source.[hash_Url]
      ,T_Source.[rep]
      ,T_Source.[Version]
      ,T_Source.[isEnabled]
      ,T_Source.[Type]
      ,T_Source.[MassMediaBlogId]
      ,T_Source.[TopLevelDomain]
      ,T_Source.[Domain]
      ,T_Source.[IsAd]
      ,T_Source.[IsVerified]);
SET IDENTITY_INSERT dbo.Blogs_bigint OFF; 

drop table #t1



Но получаю ошибку:
авторCannot update identity column 'Id'.

Почему? Ведь перед вставкой я использую:
Код: sql
1.
SET IDENTITY_INSERT dbo.Blogs_bigint ON;  
...
Рейтинг: 0 / 0
MERGE в триггере?
    #40009151
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Понял ошибку, апдейт же поля ID пытаюсь сделать, а не вставку.
...
Рейтинг: 0 / 0
MERGE в триггере?
    #40009302
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MERGE в триггере?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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