所以我需要将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中创建它们?
谢谢你们!
答案 0 :(得分:2)
要指出的几点不同。
SQL Server没有“之前”触发器,因此您必须将第一个转换为INSTEAD OF触发器并手动执行插入操作。
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