NOT FOR REPLICATION
フラグの設定が必要なトリガーが 505 個あります。「%AS%」を検索し、NOT FOR REPLICATION
その直前に追加するユーザー クエリが見つかりました。
問題は、AS の最初のインスタンスにヒットすることです。これは、コメント(つまり-- Trigger to prevent update of LastUpdated column
) またはトリガー名(つまりtrgLastUpdated
) である可能性があります。
以下は、私たちが試してきたことです。正しいものを見つけて、その直前に AS
配置する方法について誰か提案がありますか?NOT FOR REPLICATION
主なクエリ:
DROP TABLE #TriggersNFR
CREATE TABLE #TriggersNFR (ServerName varchar(250), Dbname varchar(250),TableName varchar(250), TriggerName varchar(250), FixingScript varchar(max))
exec sp_MSforeachdb '
IF ''?'' NOT IN (''tempdb'',''master'',''model'',''msdb'') BEGIN
USE ?
insert into #TriggersNFR
SELECT @@servername,''?'' DBName,OBJECT_NAME(parent_object_id) TableName,
OBJECT_NAME(o.object_id) [Trigger Name],
STUFF (REPLACE(definition,''CREATE TRIGGER'',''ALTER TRIGGER''),
PATINDEX(''%AS%'',REPLACE(definition,''CREATE TRIGGER'',''ALTER TRIGGER'')),0,''
NOT FOR REPLICATION '')
+ ''
GO
''
from ?.sys.objects o
join ?.sys.sql_modules m
on o.object_id = m.object_id
where o.type = ''TR''
and OBJECTPROPERTY(o.object_id, ''ExecIsTriggerNotForRepl'') = 0
AND OBJECTPROPERTY(o.object_id, ''IsMSShipped'') = 0
END
'
select * from #TriggersNFR
order by Dbname
FixingScript 列にサンプル出力があります。
-- =============================================
-- Author: #####
-- Create date: 9/14/2012
-- Description: Prevents updating of a L
NOT FOR REPLICATION astUpdated date that would cause app to drop an update when the next one comes along.
-- =============================================
ALTER TRIGGER trgAppUpdates_Upd_LastUpdated
ON APP_REGISTER_UPDATES
AFTER UPDATE
AS
BEGIN
これを変更しようとしましたが、結果は失敗しました:
PATINDEX(''%AS%'',
に
PATINDEX(char(13)+''%AS%''
また
PATINDEX(''%''+char(13)+''AS%''
また
PATINDEX(''%''+char(13)+char(10)+''AS%''