TR_SMARTFIELD_UPDATE
Definition
Copy
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