![]() |
---|
CREATE trigger TR_SMARTFIELD_UPDATE on dbo.SMARTFIELD after update not for replication as begin if update(TABLECATALOGID) begin if exists(select DELETED.ID from DELETED inner join INSERTED on INSERTED.ID = DELETED.ID where DELETED.TABLECATALOGID <> INSERTED.TABLECATALOGID and DELETED.TABLECATALOGID is not null) raiserror('The TABLECATALOGID column cannot be updated.', 13, 1) end if update(SMARTFIELDDATAFORMITEM) begin update dbo.SMARTFIELD set LASTRUNON = null, CHANGEDBYID = (select distinct INSERTED.CHANGEDBYID from INSERTED where INSERTED.ID = SMARTFIELD.ID) where SMARTFIELD.ID in (select DELETED.ID from DELETED) end if update(USEVALUEGROUP) or update(NAME) or update(CURRENCYID) or update(SOURCEQUERYVIEWCATALOGID) begin declare @ID uniqueidentifier declare @CHANGEDBYID uniqueidentifier declare @NAMECHANGED bit declare @OLDNAME nvarchar(100); declare @SOURCEQUERYVIEWCHANGED bit; if (select count(INSERTED.ID) from INSERTED inner join DELETED on DELETED.ID = INSERTED.ID where INSERTED.USEVALUEGROUP <> DELETED.USEVALUEGROUP or INSERTED.NAME <> DELETED.NAME or INSERTED.CURRENCYID <> DELETED.CURRENCYID or INSERTED.SOURCEQUERYVIEWCATALOGID <> DELETED.SOURCEQUERYVIEWCATALOGID) > 1 begin declare update_cursor cursor local fast_forward for SELECT INSERTED.ID, case when INSERTED.NAME <> DELETED.NAME then 1 else 0 end, INSERTED.CHANGEDBYID, DELETED.NAME, case when INSERTED.SOURCEQUERYVIEWCATALOGID <> DELETED.SOURCEQUERYVIEWCATALOGID then 1 else 0 end from INSERTED inner join DELETED on DELETED.ID = INSERTED.ID where INSERTED.USEVALUEGROUP <> DELETED.USEVALUEGROUP or INSERTED.NAME <> DELETED.NAME or INSERTED.CURRENCYID <> DELETED.CURRENCYID or INSERTED.SOURCEQUERYVIEWCATALOGID <> DELETED.SOURCEQUERYVIEWCATALOGID open update_cursor; fetch next from update_cursor into @ID, @NAMECHANGED, @CHANGEDBYID, @OLDNAME, @SOURCEQUERYVIEWCHANGED; while @@FETCH_STATUS = 0 begin if @ID is not null exec dbo.USP_SMARTFIELD_UPDATESMARTFIELDQUERIES @ID, @NAMECHANGED, @CHANGEDBYID, @OLDNAME, @SOURCEQUERYVIEWCHANGED; fetch next from update_cursor into @ID, @NAMECHANGED, @CHANGEDBYID, @OLDNAME, @SOURCEQUERYVIEWCHANGED; end close update_cursor; deallocate update_cursor; end else begin SELECT @ID = INSERTED.ID, @NAMECHANGED = case when INSERTED.NAME <> DELETED.NAME then 1 else 0 end, @CHANGEDBYID = INSERTED.CHANGEDBYID, @OLDNAME = DELETED.NAME, @SOURCEQUERYVIEWCHANGED = case when INSERTED.SOURCEQUERYVIEWCATALOGID <> DELETED.SOURCEQUERYVIEWCATALOGID then 1 else 0 end from INSERTED inner join DELETED on DELETED.ID = INSERTED.ID where INSERTED.USEVALUEGROUP <> DELETED.USEVALUEGROUP or INSERTED.NAME <> DELETED.NAME or INSERTED.CURRENCYID <> DELETED.CURRENCYID or INSERTED.SOURCEQUERYVIEWCATALOGID <> DELETED.SOURCEQUERYVIEWCATALOGID; if @ID is not null exec dbo.USP_SMARTFIELD_UPDATESMARTFIELDQUERIES @ID, @NAMECHANGED, @CHANGEDBYID, @OLDNAME, @SOURCEQUERYVIEWCHANGED; end end if update(CURRENCYID) begin declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY](); update dbo.[SMARTFIELD] set [SMARTFIELD].[CURRENCYID] = @ORGANIZATIONCURRENCYID, [SMARTFIELD].[CHANGEDBYID] = [SMARTFIELD].[CHANGEDBYID], [SMARTFIELD].[DATECHANGED] = [SMARTFIELD].[DATECHANGED] from inserted inner join dbo.[SMARTFIELD] on inserted.ID = [SMARTFIELD].[ID] inner join dbo.[SMARTFIELDCATALOG] on [SMARTFIELD].[SMARTFIELDCATALOGID] = [SMARTFIELDCATALOG].[ID] where [SMARTFIELD].[CURRENCYID] is null and [SMARTFIELDCATALOG].[DATATYPECODE] = 3; end if update([USEVALUEGROUP]) begin if (select count([ODS].[ID]) from dbo.[OLAPDATASOURCE] [ODS] where [ODS].[MARTKEY] = 'BBDW') > 0 begin if exists ( select [INS].[ID] from [inserted] [INS] join [deleted] [DEL] on [INS].[ID] = [DEL].[ID] left join dbo.[OLAPDATASOURCESMARTFIELD] [ODSSF] on [INS].[ID] = [ODSSF].[SMARTFIELDID] where [INS].[USEVALUEGROUP] = 0 and [DEL].[USEVALUEGROUP] = 1) begin declare @CONTEXTCACHE varbinary(128) = CONTEXT_INFO() set CONTEXT_INFO @CHANGEDBYID; delete from [OLAPDATASOURCESMARTFIELD] where [SMARTFIELDID] in ( select [INS].[ID] from [inserted] [INS] join [deleted] [DEL] on [INS].[ID] = [DEL].[ID] left join dbo.[OLAPDATASOURCESMARTFIELD] [ODSSF] on [INS].[ID] = [ODSSF].[SMARTFIELDID] where [INS].[USEVALUEGROUP] = 0 and [DEL].[USEVALUEGROUP] = 1); if @CONTEXTCACHE is not null begin set CONTEXT_INFO @CONTEXTCACHE end; end end end end |