Average 28000 requests/month












 

This is a script to convert triggers to have the NFR attribute (supplied by Paul Canino).

 

create table #tLoopTable (iRow int IDENTITY (1, 1) NOT NULL, cTriggerName sysname, idObj int, iColId int, iMaxCol int)

declare @iRow int, @iMaxRow int, @cTriggerName sysname, @idObj int, @iColId int, @iColPnt int, @iMaxCol int, @cSQL varchar(8000)

insert into #tLoopTable
select o.name as cTriggerName, b.id, b.colid,
(select max(colid) from syscomments where id = o.id) as iMaxCol
from syscomments b
inner join sysobjects o on o.id = b.id
where o.xtype = 'TR'
and o.id in(select id from syscomments where colid = 1 and patindex( '%not for replication%', text ) = 0)
and colid = 1
and o.name not like 'ins_%' /*Do not update replication triggers - still working on a better way to define these*/
and o.name not like 'upd_%' /*Do not update replication triggers - still working on a better way to define these*/
and o.name not like 'del_%' /*Do not update replication triggers - still working on a better way to define these*/
order by o.name, b.colid

select @iRow = 0, @iMaxRow = Max(iRow) from #tLoopTable

while @iRow < @iMaxRow
begin
   set @iRow = @iRow + 1
   select @idObj = idObj, @iColId = iColId, @iMaxCol = iMaxCol, 
   @cTriggerName = cTriggerName from #tLoopTable where iRow = @iRow
   set @cSQL = ''
   set @iColPnt = @iColId
   set @cSQL = @cSQL + ' DECLARE @cTgrStringNFR' + ltrim(rtrim(@iRow + @iColPnt )) 
   + ' varchar(8000) '

   while @iColPnt <= @iMaxCol
   begin
      set @cSQL = @cSQL + ' DECLARE @cTgrString' + ltrim(rtrim(@iRow + @iColPnt )) + ' varchar(8000) 
      SELECT @cTgrString' + ltrim(rtrim(@iRow + @iColPnt)) + ' = text from syscomments where id = ' + 
      rtrim(@idObj) + ' and colid = ' + rtrim(@iColPnt) + ' '
      set @iColPnt = @iColPnt + 1 
   end 

   set @cSQL = @cSQL + ' drop trigger [dbo].[' + rtrim(ltrim(@cTriggerName)) + ']'
   set @iColPnt = @iColId

   set @cSQL = @cSQL + ' if CHARINDEX(''AS'', @cTgrString' 
   + ltrim(rtrim(@iRow + @iColPnt )) + ', CHARINDEX(''FOR '', @cTgrString' 
   + ltrim(rtrim(@iRow + @iColPnt)) + ')) > 0 

   set @cTgrStringNFR' + ltrim(rtrim(@iRow + @iColPnt )) + ' = substring(@cTgrString' 
   + ltrim(rtrim(@iRow + @iColPnt )) + ', 1, CHARINDEX(''AS'', @cTgrString' 
   + ltrim(rtrim(@iRow + @iColPnt )) + ', CHARINDEX(''FOR '', @cTgrString' + ltrim(rtrim(@iRow +    
   @iColPnt)) + '))-1) + '' NOT FOR REPLICATION '' + substring(@cTgrString' 
   + ltrim(rtrim(@iRow + @iColPnt )) + ', CHARINDEX(''AS'', @cTgrString' 
   + ltrim(rtrim(@iRow + @iColPnt )) + ', CHARINDEX(''FOR '', @cTgrString' 
   + ltrim(rtrim(@iRow + @iColPnt)) + ')), len(@cTgrString' + ltrim(rtrim(@iRow + @iColPnt )) 
   + ')) else set @cTgrStringNFR' + ltrim(rtrim(@iRow + @iColPnt )) + ' = @cTgrString' 
   + ltrim(rtrim(@iRow + @iColPnt )) 

   set @cSQL = @cSQL + ' 

   exec('while @iColPnt <= @iMaxCol
   begin
      if @iColPnt > 1 
      begin
         set @cSQL = @cSQL + ' + @cTgrString' + ltrim(rtrim(@iRow + @iColPnt )) 
      end
      else
      begin
         set @cSQL = @cSQL + ' @cTgrStringNFR' + ltrim(rtrim(@iRow + @iColPnt )) 
      end
      set @iColPnt = @iColPnt + 1 
   end 

   set @cSQL = @cSQL + ')'
   exec(@cSQL)
end

drop table #tLoopTable

 
 

April 2006