2011-01-25 165 views
2

因此,我需要將MySQL數據庫轉換爲SQL Server 2008 R2數據庫。爲此,我使用了Microsoft的新SSMA MySQL工具。除了觸發器之外,一切都轉換得很好,轉換它們時會一直崩潰。將MySql觸發器轉換爲SQL Server 2008 R2觸發器

首先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來創建它們?

謝謝你們!

+0

是它觸發本身,或東西導致崩潰觸發的邏輯是什麼?嘗試移植一個基本上什麼都不做的簡單的觸發器,看看它是否會爆炸。 – 2011-01-25 16:10:33

+0

好問題,觸發器中有很多邏輯。我會給一個超級簡單的觸發器轉換一個鏡頭。 – Lucas311 2011-01-25 16:36:49

回答

2

有幾點需要指出。

  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