2014-01-11 2 views
0

MS SQL 트리거 생성을위한 명령을 MySQL의 유사한 명령으로 변환하는 데 도움이 필요합니다. 그것은 MS SQL에서 잘 작동하지만 나는 MySQL의 아무것도 몰라. 그것은 다음과 같이Microsoft SQL to MySQL trigger

명령은 다음과 같습니다 자신의 명백한 유사성에도 불구하고

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 

답변

1

을, SQL 서버와 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;; 

주목할 가치가있을 수 있습니다를한다는 점에서 SQL Server의 SUSER_SNAME(), CURRENT_USER 같은 MySQL은 클라이언트가 인증 된 사용자가 아닌 트리거가 실행중인 사용자를 반환합니다. 대신에 MySQL의 USER() 함수를 사용할 수 있습니다.

또한, MySQL이 Automatic Initialization and Updating for TIMESTAMP and DATETIME을 제공하므로 트리거 내에서 이러한 값을 설정하지 않아도됩니다. (트리거에 영향을주지 않습니다) 초기 SET 문에 관해서는

는, MySQL은 SQL 서버의 ANSI_NULLS 설정에는 해당이 없습니다하지만 당신은 SQL 서버의 QUOTED_IDENTIFIER 설정하는 것과 같은 효과를 달성하고자하는 경우는 ANSI_QUOTES SQL 모드를 설정할 수 있습니다 .

+0

대단히 감사합니다, eggyal! 너는 아주 도움이되었다. –

+0

필자는 내 대답을 포함하여 간과 한 가장 유용한 링크가 MySQL의 [CREATE TRIGGER Syntax] (http://dev.mysql.com/doc/en/create-trigger.html)의 문서화에 있다고 가정합니다. – eggyal

+0

다시 한번 감사드립니다. –