簡體   English   中英

我如何優化觸發器

[英]How can i optimize the Trigger

我之前檢查了很多問題,但無法獲得如何優化此觸發器的方法


ALTER trigger [dbo].[Expample] 
on [dbo].[AdminUsers]
for update
as begin

declare @Id int
declare @new_val nvarchar(max)
declare @old_val nvarchar(max)

Declare @AuditString nvarchar(max)
  Select *
      into #TempTable
      from inserted

 While(Exists(Select Id from #TempTable))
      Begin
      Set @AuditString = ''

      Select Top 1 @Id = Id,@new_val = Fname
        from #TempTable

        Select @old_val = Fname
        from deleted where Id = @Id

        Set @AuditString = 'Id = ' + Cast(@Id as nvarchar(4)) + ' changed'

         if(@old_val <> @new_val)
                  Set @AuditString = @AuditString + ' NAME from ' + @old_val + ' to ' + @new_val

                   insert into [dbo].[tbl_audit] (Id,Auditdata) values(@Id,@AuditString)

            -- Delete the row from temp table, so we can move to the next row
            Delete from #TempTable where Id = @Id
end
end

我如何將此代碼更改為

ALTER觸發[dbo]。[dbo]上的[示例]。[AdminUsers]開始更新

聲明@Id int聲明@new_val nvarchar(max)聲明@old_val nvarchar(max)

聲明@AuditString nvarchar(max)開始設置@AuditString =''

  Select Top 1 @Id=inserted.Id,@new_val =inserted.Fname,@old_val = deleted.Fname from inserted join deleted on inserted.Id=deleted.Id 
 -- Select Top 1 @Id = Id,@new_val = Fname
 --   from #TempTable

    --Select @old_val = Fname
    --from deleted where Id = @Id

    Set @AuditString = 'Id = ' + Cast(@Id as nvarchar(4)) + ' changed'

     if(@old_val <> @new_val)
              Set @AuditString = @AuditString + ' NAME from ' + @old_val + ' to ' + @new_val

               insert into [dbo].[tbl_audit] (Id,Auditdata) values(@Id,@AuditString)

        -- Delete the row from temp table, so we can move to the next row

結束

感謝幫助

我無法對其進行測試,但看來這是您要完成的工作:

ALTER trigger [dbo].[Expample]
on [dbo].[AdminUsers]
for update
as begin

    insert into [dbo].[tbl_audit] (Id, Auditdata)
    select t1.Id, 'Id = ' + Cast(t1.Id as nvarchar(4)) + ' changed NAME from ' + t2.Fname + ' to ' + t1.Fname
    from inserted t1
    join deleted t2 on t2.Id = t1.Id and t2.Fname != t1.Fname

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM