SQL Server 2005触发了移动到SQL Server 2008的审计表,现在触发器在尝试将行插入审计表时没有响应

时间:2010-04-07 14:03:06

标签: sql sql-server-2005 sql-server-2008 triggers

我们从SQL Server 2005数据库和表开始。 [UPDATE,INSERT和DELETE]在这种情况下,我们使用UPDATE触发器在修改应用程序(VB6)数据表时将行插入审计tbl(s)。我们将审计表移到SQL Server 2008.触发器语句中的唯一更改(在SQL Server 2005上)我们将原始([FHA-4])修改为新的(SQL Server 2008 [FHA-DMZ- CL1SQL])服务器名称。

当触发器被激活时,小时玻璃一直亮着,直到出现sql超时消息并且应用程序中止。检查审计表时,不会添加任何新内容,因此插入不起作用。

以下是该表的实际触发器语句:

USE [BCC_DHMH]
GO
/****** Object:  Trigger [dbo].[TriggerAddressUpdate]    Script Date: 04/07/2010       09:47:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--Logic to save to the table that supports Tripwire
ALTER       TRIGGER [dbo].[TriggerAddressUpdate] 
   ON  [dbo].[tblAddress]
   AFTER UPDATE
AS 

SET XACT_ABORT ON
BEGIN DISTRIBUTED TRANSACTION
 SET NOCOUNT ON;

 --IF (SYSTEM_USER <> 'FHA\kYarberough' AND SYSTEM_USER <> 'FHA\ljlee' AND SYSTEM_USER <> 'FHA\PHarvey' AND SYSTEM_USER <> 'FHA\BShenosky' AND SYSTEM_USER <> 'FHA\BBrodie' AND SYSTEM_USER <> 'FHA\DRandolph')
Declare @UpdateID as varchar(50)
Set @UpdateID = newid() 

BEGIN

 INSERT [FHA-4].[ECMS_Audit].[dbo].[tblAddress_Audit]
  ([fldAddressOwnerID], [fldUpdateID], [fldAddressTypeCode], [fldAddressMailcode], [fldAddressSequence], 
[fldAddressID], [fldName], [fldLine1], [fldLine2], [fldCity], [fldState], [fldCounty], 
[fldZipcode], [fldWorkFax], [fldWorkPhone], [fldWorkExtension], [fldWorkEMail], [fldHomePhone], 
[fldHomeEMail], [fldContactName], [fldContactPhone], [fldContactFax], [fldContactExtension], [fldEffectiveDate], 
[fldExpirationDate], [fldUpdateTimestamp], [fldUpdateUserID], [fldRelationship], [fldNotes], [fldNCPDPNum], 
[fldMedicaidNum], [fldStoreNum], 
    [ModifiedBySqlUser], [ModifiedByNTUser], [ModifiedDate], [Action] )
 SELECT [fldAddressOwnerID], @UpdateID, [fldAddressTypeCode], [fldAddressMailcode], [fldAddressSequence], 
[fldAddressID], [fldName], [fldLine1], [fldLine2], [fldCity], [fldState], [fldCounty], 
[fldZipcode], [fldWorkFax], [fldWorkPhone], [fldWorkExtension], [fldWorkEMail], [fldHomePhone], 
[fldHomeEMail], [fldContactName], [fldContactPhone], [fldContactFax], [fldContactExtension], [fldEffectiveDate], 
[fldExpirationDate], [fldUpdateTimestamp], [fldUpdateUserID], [fldRelationship], [fldNotes], [fldNCPDPNum], 
[fldMedicaidNum], [fldStoreNum],
   CURRENT_USER, SYSTEM_USER, GETDATE(), 'InitialValues'  FROM deleted


 INSERT [FHA-4].[ECMS_Audit].[dbo].[tblAddress_Audit]
  ([fldAddressOwnerID], [fldUpdateID], [fldAddressTypeCode], [fldAddressMailcode], [fldAddressSequence], 
[fldAddressID], [fldName], [fldLine1], [fldLine2], [fldCity], [fldState], [fldCounty], 
[fldZipcode], [fldWorkFax], [fldWorkPhone], [fldWorkExtension], [fldWorkEMail], [fldHomePhone], 
[fldHomeEMail], [fldContactName], [fldContactPhone], [fldContactFax], [fldContactExtension], [fldEffectiveDate], 
[fldExpirationDate], [fldUpdateTimestamp], [fldUpdateUserID], [fldRelationship], [fldNotes], [fldNCPDPNum], 
[fldMedicaidNum], [fldStoreNum], 
    [ModifiedBySqlUser], [ModifiedByNTUser], [ModifiedDate], [Action] )
 SELECT [fldAddressOwnerID], @UpdateID, [fldAddressTypeCode], [fldAddressMailcode], [fldAddressSequence], 
[fldAddressID], [fldName], [fldLine1], [fldLine2], [fldCity], [fldState], [fldCounty], 
[fldZipcode], [fldWorkFax], [fldWorkPhone], [fldWorkExtension], [fldWorkEMail], [fldHomePhone], 
[fldHomeEMail], [fldContactName], [fldContactPhone], [fldContactFax], [fldContactExtension], [fldEffectiveDate], 
[fldExpirationDate], [fldUpdateTimestamp], [fldUpdateUserID], [fldRelationship], [fldNotes], [fldNCPDPNum], 
[fldMedicaidNum], [fldStoreNum],
   CURRENT_USER, SYSTEM_USER, GETDATE(), 'NewValues'  FROM inserted
 END

COMMIT TRANSACTION
SET XACT_ABORT OFF

1 个答案:

答案 0 :(得分:3)

好吧,这个触发器似乎对我有旧名称。但如果真的有新名字......嗯......

由于它是分布式事务,您确定已正确设置链接服务器吗?

此外,我不希望在触发器中使用分布式事务,如果其他服务器关闭,它可能会影响用户能够更改记录。最好将记录发送到同一服务器上的审计表或运行作业的临时表,以将记录移动到其他服务器。

相关问题