gpt4 book ai didi

mysql - Microsoft SQL 到 MySQL 触发器

转载 作者:行者123 更新时间:2023-11-29 13:19:18 24 4
gpt4 key购买 nike

我需要帮助将用于创建触发器的 MS SQL 命令转换为 MySQL 中的类似命令。它在 MS SQL 中运行良好,但我对 MySQL 一无所知。

命令如下:

USE [Project]
GO

/****** Object: Trigger [General].[TR_tblFirmaZaposleni_U] Script Date: 7.1.2014 17:47:35 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [General].[TR_tblFirmaZaposleni_U]
ON [General].[tblFirmaZaposleni]
FOR UPDATE
AS UPDATE [General].[tblFirmaZaposleni]
SET [A_tblFirmaZaposleniUpdatedBy] = SUBSTRING(SUSER_SNAME(),(CHARINDEX('\',SUSER_SNAME()) + 1),LEN(SUSER_SNAME())), [A_tblFirmaZaposleniUpdatedOn] = GetDate()
FROM [General].[tblFirmaZaposleni] s
INNER JOIN [INSERTED] i ON s.[ZaposleniID] = i.[ZaposleniID]
INSERT INTO ProjectAudit.[General].[tblFirmaZaposleni] SELECT 'B','U',* FROM DELETED
INSERT INTO ProjectAudit.[General].[tblFirmaZaposleni] SELECT 'A','U',* FROM INSERTED
GO

最佳答案

尽管 SQL Server 和 MySQL 表面上很相似,但它们实际上是非常不同的产品:它们都以不同的方式偏离了 SQL 标准。事实上,随着人们更深入地研究它们的特性和功能,分歧会显着扩大。

因此,SQL Server 中的功能与 MySQL 中的功能之间并不存在 1:1 的映射。您最好阅读一下系统之间的差异以及如何最好地管理迁移。很可能应该专门设计应用程序设计的重要元素,以利用(或克服缺乏)一个系统或另一个系统中存在的特性或功能。

如果您确实保持数据库相似,MySQL 中的一组等效命令将如下所示:

USE Project
DELIMITER ;;

CREATE TRIGGER TR_tblFirmaZaposleni_U
BEFORE UPDATE ON tblFirmaZaposleni
FOR EACH ROW BEGIN

SET NEW.A_tblFirmaZaposleniUpdatedBy = SUBSTRING_INDEX(CURRENT_USER, '@', 1),
NEW.A_tblFirmaZaposleniUpdatedOn = CURRENT_DATE;

INSERT INTO ProjectAudit.tblFirmaZaposleni VALUES
('B','U', OLD.colA, OLD.colB, OLD.colC, ....),
('A','U', NEW.colA, NEW.colB, NEW.colC, ....);

END;;

值得注意的是,例如 SUSER_SNAME()在 SQL Server 中,CURRENT_USER MySQL 中返回运行触发器的用户,而不是对客户端进行身份验证的用户。您可能希望使用MySQL的USER()函数代替。

还值得注意的是,MySQL 提供 Automatic Initialization and Updating for TIMESTAMP and DATETIME ,这样您就不必在触发器中设置此类值。

对于初始SET语句(对触发器没有影响),MySQL没有与SQL Server的ANSI_NULLS等效的语句。设置,但您可以设置其 ANSI_QUOTES SQL模式如果你想达到与设置SQL Server的QUOTED_IDENTIFIER相同的效果.

关于mysql - Microsoft SQL 到 MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21062726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com