2016-04-15 67 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也没有'为每个行“,但在这种情况下,它并不重要,它在功能上是相同的。 –