将MySql触发器转换为SQL Server 2008 R2触发器

时间:2011-01-25 16:07:24

标签: mysql sql sql-server-2008 triggers

所以我需要将MySQL数据库转换为SQL Server 2008 R2数据库。为此,我使用了Microsoft的新SSMA MySQL工具。除了触发器之外,一切都被转换得很好,转换时它们一直在崩溃。

第一个MySQL触发器:

CREATE
DEFINER=`root`@`localhost`
TRIGGER `dbo`.`table_A_trig`
BEFORE INSERT ON `dbo`.`table_A`
FOR EACH ROW
BEGIN
   /* Logic here */ 
END

第二个MySQL触发器:

CREATE
DEFINER=`root`@`localhost`
TRIGGER `dbo`.`table_A_trig_Update`
AFTER UPDATE ON `dbo`.`table_A`
FOR EACH ROW
BEGIN
  /* Logic Here */
END

我应该如何重写它们以便能够在SQL Server 2008中创建它们?

谢谢你们!

1 个答案:

答案 0 :(得分:2)

要指出的几点不同。

  1. SQL Server没有“之前”触发器,因此您必须将第一个转换为INSTEAD OF触发器并手动执行插入操作。

  2. SQL Server触发器使用特殊的INSERTED(相当于MySQL中的NEW)和DELETED(相当于MySQL中的OLD)表。

  3. 所以你的CREATE TRIGGER syntax看起来像是:

    CREATE TRIGGER dbo.table_A_trig
    ON dbo.table_A INSTEAD OF INSERT
    AS
    BEGIN
        /* logic here */
    
        /* Manually perform the insert operation */
        INSERT INTO dbo.table_A 
            (column_list)
            SELECT column_list
                FROM INSERTED
    END
    
    CREATE TRIGGER dbo.table_A_trig_Update
    ON dbo.table_A FOR UPDATE
    AS
    BEGIN
        /* logic here */
    END