无法创建SQL Server 2012触发器

时间:2014-10-20 18:26:51

标签: sql-server triggers sql-server-2012

我在SQL Server 2012上很新,我遇到了一个奇怪的问题。

我在数据库的表上开发了AFTER UPDATE触发器。我在我们的开发环境中创建了触发器,这是SQL Server 2012的快速版,没问题。

现在我必须在我们的生产环境中创建相同的触发器,即SQL Server 2012企业版,创建脚本永远不会停止执行,并且不会创建触发器。

关于创建触发器需要做什么的任何想法?

剧本:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter TRIGGER [dbo].[til_aks_ved_betaling] 
   ON [dbo].[betalingsOplysningerbo] 
   AFTER UPDATE 
AS 
BEGIN
    declare @snr          uniqueidentifier
    declare @@status      varchar(1024)

    SET NOCOUNT ON;    

    select 
        @snr = indmeldelse_snr 
    from 
        inserted

    if UPDATE(betalingsDato)        
    begin          
         set @@status = 'Kalder med snr = ' + convert(varchar(38), @snr)     

         exec xp_logevent 60000,  @@status , informational                
         exec overfoer_betalingsdato @snr
    end
 END

2 个答案:

答案 0 :(得分:0)

这里有2件事,对于新人来说很常见,UPDATE是DELETE和INSERT,所以在你认为它是更新之前确保你有两件事。其次,这些特殊的表将返回所有受单个sql调用影响的行。例如,Update Table SET This = 'That'将更新表中的每条记录,而INSERTED则包含许多记录。

答案 1 :(得分:0)

尝试这样的事情......

ALTER TRIGGER [dbo].[til_aks_ved_betaling] 
ON  [dbo].[betalingsOplysningerbo] 
AFTER UPDATE 
AS 
BEGIN
  SET NOCOUNT ON;
        declare @snr          VARCHAR(1000);
        declare @status      varchar(1024);    


   DECLARE @Temp TABLE (indmeldelse_snr uniqueidentifier , [Status]  varchar(1024))

   INSERT INTO @Temp (indmeldelse_snr  , [Status])
   SELECT i.indmeldelse_snr , i.[Status]
   FROM inserted i INNER JOIN deleted d 
   ON i.Snr = d.Snr AND i.betalingsDato <> d.betalingsDato


WHILE EXISTS(SELECT * FROM @Temp)
  BEGIN
        SELECT TOP 1 @snr = 'Kalder med snr = ' + convert(varchar(38),indmeldelse_snr )
                         ,@status = [Status]
        FROM @Temp 

        exec xp_logevent 60000,  @status , informational                
        exec overfoer_betalingsdato @snr

        DELETE FROM @Temp WHERE indmeldelse_snr = @snr

    END 

 END