Преобразование триггера MySql в триггер SQL Server 2008 R2 - PullRequest
2 голосов
/ 25 января 2011

Итак, мне нужно было преобразовать базу данных 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 Ответ

2 голосов
/ 25 января 2011

Несколько отличий, на которые следует обратить внимание.

  1. SQL Server не имеет триггера «до», поэтому вам придется преобразовать первый как триггер INSTEAD OF и вручную выполнить операцию вставки.

  2. Триггеры SQL Server используют специальные таблицы INSERTED (эквивалентно NEW в MySQL) и DELETED (эквивалент OLD в MySQL).

Итак, ваш CREATE TRIGGER синтаксис будет выглядеть примерно так:

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
...