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

标签 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. SQL Server 没有“之前”触发器,因此您必须将第一个触发器转换为 INSTEAD OF 触发器并手动执行插入操作。

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

所以你的 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

关于mysql - 将 MySql 触发器转换为 SQL Server 2008 R2 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4795818/

相关文章:

sql - 如何将数字转换为单词 - ORACLE

tsql - 删除所有登录名,其中 loginname 像

sql - SQL Server 中的递归查询问题

mysql - 如何将所有表导出到单独的 sql 文件中

mysql - 将.xlsx数据导入mysql数据库

sql - 排名查询结果 - Rails

sql - 如何搜索表中的所有列?

mysql - 一个纬度/经度坐标与使用 SQL 的固定坐标之间的近似距离

php - 仅选择有积分的网站

mysql - 连接两个表时可以使用 OR 吗?