2016-04-15 100 views
-1

我意識到觸發器的語法對於不同的軟件稍有不同。 SQL Server 2012中以下代碼的語法是什麼?SQL服務器的觸發語法

Create trigger before_playercatalogue_update 
before update 
on player_catalogue 
For each row 
Begin 
    Insert into player_audit 
    set action = 'update', 
     playerid = old.playerid 
     fname = old.fname, 
     datachange = (Now); 
End 
+0

您提供的代碼有問題嗎?您是否收到錯誤消息或者假設sql server 2012和另一個版本之間存在語法差異? – 2016-04-15 02:17:00

+1

看看這篇文章http://stackoverflow.com/questions/642822/how-can-i-do-a-before-updated-trigger-with-sql-server – Thomas

回答

0

語法完全不同。它看起來像:

Create trigger after_playercatalogue_update 
on player_catalogue after update 
as 
Begin 
    Insert into player_audit(action, playerid, fname, datachange) 
     select 'update', playerid, fname, getdate() 
     from inserted; 
End; 

注意的一些變化:

  • 這是一個after觸發。 SQL Server沒有「之前」的觸發器。
  • set子句在SQL Server(或其他數據庫)中不支持insert
  • SQL Server不具有「新」和「舊」。它使用inserted,對已更改記錄的視圖。
+1

SQL也沒有'爲每個行「,但在這種情況下,它並不重要,它在功能上是相同的。 –