SQL ServerÀÇ Æ®¸®°Åµµ ¿À¶óŬÀÇ Æ®¸®°Å¿Í °³³äÀ̳ª »ç¿ë ¸ñÀûÀº
°ÅÀÇ °°°í Á¦°øÇÏ´Â ±â´Éµµ ºñ½ÁÇÏ´Ù. ÀÌÂÊ¿¡ ÀÖ´Â ±â´ÉÀº °á±¹ ÀúÂÊ¿¡µµ ÀÖÀ» ¼ö¹Û¿¡ ¾ø´Ù. ±×·¯³ª Çü½ÄÀÌ ´Ù¸£´Ù º¸´Ï ±¸¹®»óÀÇ Â÷ÀÌ°¡ ÀÖ°í ±â´ÉÀÇ ¹üÀ§µµ ¾à°£¾¿ ´Ù¸£´Ù.
ÀÌ¹Ì ¿À¶óŬ Æí¿¡¼ Æ®¸®°ÅÀÇ °³³ä°ú Á¾·ù, »ç¿ë ½Ç½ÀÀ» ´Ù ÇØ º»
»óÅÂÀ̹ǷΠ°¡±ÞÀû °°Àº ¿¹Á¦·Î ¶È°°Àº ½Ç½ÀÀ» ÇØ º¸ÀÚ. ¿ä¾àÀûÀ¸·Î Á¤¸®ÇÏ¸ç ±â´ÉÀûÀÎ Â÷ÀÌÁ¡ À§ÁÖ·Î ¾Ë¾Æº¸¹Ç·Î
¿À¶óŬÀÇ Æ®¸®°Å¸¦ ¸ÕÀú ¾Ë¾Æ¾ß SQL ServerÀÇ Æ®¸®°Å¸¦ ÀÌÇØÇÒ ¼ö ÀÖ´Ù. Æ®¸®°Å¸¦ Á¤ÀÇÇÏ´Â ±âº» Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
CREATE TRIGGER À̸§
ON { Å×À̺í | ºä }
[WITH ENCRYPTION]
{ FOR | AFTER | INSTEAD OF } { INSERT, UPDATE,
DELETE }
AS
º»Ã¼
¿À¶óŬÀº AFTER UPDATE ON tCity¼øÀε¥ ºñÇØ SQL Server´Â ON tCity AFTER UPDATE ¼øÀÌ´Ù. ¹®Àå Æ®¸®°Å, Çà Æ®¸®°Å ±¸ºÐÀº ¾ø°í BEFORE Æ®¸®°Åµµ ¾øÀ¸¸ç INSTEAD OF°¡ ±× ¿ªÇÒÀ» ´ë½ÅÇÑ´Ù. FOR´Â AFTER¿Í µ¿ÀǾîÀÌ´Ù.
¿©·¯ À̺¥Æ®¸¦ µ¿½Ã¿¡ ÁöÁ¤ÇÒ ¶§´Â ÄÞ¸¶·Î ±¸ºÐÇÑ´Ù.
Çì´õ¿Í º»¹® »çÀÌ¿¡ AS Å°¿öµå°¡ ÀÖ¾î º»Ã¼ÀÇ BEGIN END´Â »ý·«Çصµ ¹«¹æÇÏÁö¸¸ ¹üÀ§¸¦ ¸íÈ®È÷ Çϱâ À§ÇØ ºí·ÏÀ» °¨½Î´Â °ÍÀÌ ÁÁ´Ù. WITH ENCRYPTION ¿É¼ÇÀº Æ®¸®°Å º»¹®À» ¾ÏÈ£ÈÇÏ¿© ÀúÀåÇÑ´Ù.
tCity Å×ÀÌºí º¯°æ¿¡ ´ëÇÑ Æ®¸®°Å´Â ´ÙÀ½°ú °°´Ù.
CREATE TRIGGER TR_Message
ON tCity AFTER UPDATE
AS
BEGIN
PRINT('µµ½Ã Á¤º¸¸¦ °»½ÅÇÏ¿´½À´Ï´Ù.');
END;
tCity Å×À̺íÀ» °»½ÅÇÒ ¶§ È£ÃâµÇ¾î ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. ´ÙÀ½ ¸í·ÉÀ¸·Î Æ®¸®°Å°¡ Àß È£ÃâµÇ´ÂÁö Å×½ºÆ®ÇØ º¸ÀÚ.
UPDATE tCity SET popu = popu + 1 WHERE name = '¼¿ï';
UPDATE tCity SET popu = popu + 1 WHERE region = '°æ±â';
¼¿ïÀÇ Àα¸¸¦ Áõ°¡½ÃÅ°¸é TR_Message°¡ È£ÃâµÈ´Ù. °æ±âµµÀÇ µµ½Ã µÑÀ» ÇѲ¨¹ø¿¡ º¯°æÇصµ Æ®¸®°Å´Â ÇÑ ¹ø¸¸ È£ÃâµÇ¸ç ¸Þ½ÃÁöµµ ÇÑ ¹ø¸¸ Ãâ·ÂÇÑ´Ù. Çà Æ®¸®°Å°¡ µû·Î ¾ø°í ¸í·É Çϳª¿¡ ´ëÇØ Æ®¸®°Å¸¦ ÇÑ ¹ø È£ÃâÇÏ´Â ½ÄÀÌ´Ù. Æ®¸®°Å
º»¹®¿¡¼´Â ´ÙÀ½ Àӽà Å×À̺í°ú ÇÔ¼ö·Î º¯°æ »ç½ÇÀ» ¾Ë¾Æ³½´Ù.
Å×À̺í, ÇÔ¼ö |
¼³¸í |
inserted Å×À̺í |
INSERT, UPDATE½Ã º¯°æµÈ ÈÄÀÇ ·¹ÄÚµåÀÌ¸ç ¾î¶² ·¹Äڵ尡 »ðÀԵǾú´ÂÁö, ·¹Äڵ尡 ¾î¶»°Ô ¹Ù²î¾ú´ÂÁö ¾Ë ¼ö ÀÖ´Ù. |
deleted Å×À̺í |
DELETE, UPDATE½Ã »èÁ¦ ¶Ç´Â º¯°æ ÀüÀÇ ·¹ÄÚµåÀ̸ç Äõ¸®¹® ½ÇÇàÀüÀÇ
·¹Äڵ带 ¾Ë ¼ö ÀÖ´Ù. |
UPDATE ÇÔ¼ö |
ƯÁ¤ ¿ÀÌ º¯°æµÇ¾ú´ÂÁö Á¶»çÇÑ´Ù. DELETE ¸í·ÉÀº ƯÁ¤ ¿¸¸ »èÁ¦ÇÏ´Â ±â´ÉÀÌ
¾ø¾î ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. |
COLUMNS_UPDATED ÇÔ¼ö |
º¯°æµÈ ¿ÀÇ ºñÆ® ¸¶½ºÅ©À̸ç ÇÏÀ§ ºñÆ®ºÎÅÍ Ã¹ ¹ø° Çʵå¿Í ´ëÀÀÇÑ´Ù. |
inserted, deleted´Â ¿À¶óŬÀÇ NEW, OLD¿¡ ÇØ´çÇ쵂 ¿À¶óŬÀº ·¹ÄÚµå Çϳª¸¦ Àü´ÞÇϴµ¥ ºñÇØ SQL
Server´Â ¿©·¯ ·¹Äڵ带 Æ÷ÇÔÇÑ Å×À̺íÀ̶ó´Â Á¡ÀÌ ´Ù¸£´Ù. µÎ Àӽà Å×ÀÌºí¿¡ ¾î¶² Á¤º¸°¡
ÀúÀåµÇ´ÂÁö Æ®¸®°Å º»¹®¿¡¼ ´ýÇÁÇØ º¸ÀÚ. Æ®¸®°Å¸¦ ¼öÁ¤ÇÒ ¶§´Â DROP
ÈÄ ´Ù½Ã ¸¸µé°Å³ª ¾Æ´Ï¸é ALTER TRIGGER ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
ALTER TRIGGER TR_Message
ON tCity AFTER UPDATE
AS
BEGIN
SELECT
* FROM deleted;
SELECT
* FROM inserted;
END;
º¯¼ö¸¦ °æÀ¯ÇÒ ÇÊ¿ä ¾øÀÌ SELECT ¸í·ÉÀ» ¹Ù·Î ¾µ ¼ö ÀÖ¾î °á°ú
È®ÀÎÀÌ Æí¸®ÇÏ´Ù. ÀÌ Æ®¸®°Å¸¦ ¼³Ä¡ÇØ ³õÀº »óÅ¿¡¼ °æ±âµµ µµ½ÃÀÇ Àα¸¼ö¸¦ º¯°æÇÏ¸é µÎ Å×À̺íÀÌ °á°úâ¿¡
³ªÅ¸³ª¸ç º¯°æÇÑ ¸ðµç ·¹Äڵ尡 ±â·ÏµÇ¾î ÀÖ´Ù.
deleted Å×ÀÌºí¿¡´Â ¿ø·¡ Àα¸¼ö°¡ ÀÖ°í inserted Å×ÀÌºí¿¡´Â º¯°æµÈ Àα¸¼ö°¡ ÀÖ´Ù. ¿À¶óŬÀÇ Çà Æ®¸®°Å´Â
·¹ÄÚµå Çϳª¾¿ Àü´ÞÇϴµ¥ ºñÇØ SQL Server´Â ¸ðµç ·¹Äڵ带 Åë°·Î Àü´ÞÇÏ¿© º¯°æ ³»¿ªÀ» ÇÑ ¹ø¿¡
¾Ë ¼ö ÀÖ´Ù. Æ®¸®°Å¿¡¼ °¢ µµ½ÃÀÇ Àü, ÈÄ Àα¸¸¦ Ãâ·ÂÇØ
º¸ÀÚ.
ALTER TRIGGER TR_Message
ON tCity AFTER UPDATE
AS
BEGIN
SELECT
name, popu, ' => ', (SELECT popu FROM inserted WHERE name = D.name) FROM
deleted D;
END;
¿¬°ü ¼ºêÄõ¸® Çϳª·Î ½±°Ô ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. ·¹Äڵ庰·Î Æ®¸®°Å°¡ ¹ß»ýÇÏÁö
¾Ê¾Æ ÁýÇÕÀûÀ¸·Î ´Ù·ç¾î¾ß ÇÏ´Â ºÎ´ãÀÌ ÀÖÁö¸¸ ¸ð¾Æ¼ ÀÏ°ý ó¸®ÇÒ ¼ö ÀÖ¾î ¼º´É»ó À¯¸®ÇÏ´Ù.
ON tCity AFTER INSERT, UPDATE, DELETE ½ÄÀ¸·Î
µ¿½Ã¿¡ ¿©·¯ °³ÀÇ À̺¥Æ®¸¦ ¹ÞÀ» ¶§´Â Àӽà Å×ÀÌºí¿¡ ·¹Äڵ尡 ÀÖ´ÂÁö Á¡°ËÇØ º¸¸é ¾î¶² À̺¥Æ®°¡ ¹ß»ýÇß´ÂÁö ¾Ë ¼ö ÀÖ´Ù. inserted¿¡¸¸ ÀÖÀ¸¸é »ðÀÔÇÑ °ÍÀÌ°í deleted¿¡¸¸ ÀÖÀ¸¸é
»èÁ¦ÇÑ °ÍÀÌ¸ç ¾çÂÊ ´Ù ÀÖÀ¸¸é °»½ÅÇÑ °ÍÀÌ´Ù.
Æ®¸®°Å¸¦ »èÁ¦ÇÒ ¶§´Â DROP TRIGGER ¸í·ÉÀ» »ç¿ëÇÑ´Ù. ´õ ÀÌ»ó À̺¥Æ®¸¦ ¹ÞÀ» ÇÊ¿ä°¡ ¾ø´Ù¸é Á¦°ÅÇÏ¿© ½Ã½ºÅÛ ºÎ´ãÀ» ´ú¾îÁÖ´Â °ÍÀÌ ÁÁ´Ù. ÀϽà ÁßÁö¸¸ ÇØ ³õÀ» ¶§´Â ´ÙÀ½ ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
ALTER TABLE Å×À̺íÀ̸§
{ ENABLE | DISABLE } TRIGGER ( Æ®¸®°Å À̸§ | ALL }
ALLÀº Å×À̺íÀÇ ¸ðµç Æ®¸®°Å¸¦ ÁßÁöÇϸç À̸§À» ÁöÁ¤Çϸé ÇØ´ç Æ®¸®°Å¸¸
ÁßÁöÇÑ´Ù. ´ÙÀ½ ¸í·ÉÀ» ½ÇÇàÇÑ ÈÄ tCity¸¦ ¾÷µ¥ÀÌÆ®Çϸé
´õ ÀÌ»ó ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏÁö ¾Ê´Â´Ù.
ALTER TABLE tCity DISABLE TRIGGER TR_Message;
DISABLE¸¦ ENABLE·Î
¹Ù²Ù¸é Æ®¸®°Å°¡ ´Ù½Ã È°¼ºÈµÈ´Ù.
Æ®¸®°Å´Â º¯ÈÀÇ ¸ðµç ³»¿ªÀ» ´Ù µé¿©´Ù º¼ ¼ö ÀÖ´Ù´Â Á¡¿¡¼ ¹«°á¼ºÀ» ÁöÅ°´Â ÃÖÈÄÀÇ º¸·çÀÌ´Ù. ´ÙÀ½ Æ®¸®°Å´Â 1¾ï ÃÊ°ú Àα¸¼ö¸¦ °ÅºÎÇÑ´Ù.
ALTER TRIGGER TR_Message
ON tCity AFTER UPDATE
AS
BEGIN
IF
(SELECT popu FROM inserted) > 10000
BEGIN
PRINT('Àα¸°¡ 1¾ïÀ» ³ÑÀ» ¼ö´Â ¾ø½À´Ï´Ù.');
ROLLBACK;
END
END;
Á¶°ÇÀÌ ¸ÂÁö ¾ÊÀ» °æ¿ì ·Ñ¹éÇØ ¹ö¸®¸é ±×¸¸ÀÌ´Ù. ¼¿ï Àα¸¸¦ 12345·Î °»½ÅÇϸé Áï½Ã °ÅºÎÇÑ´Ù. ¿À¶óŬÀº Æ®¸®°Å¿¡¼ Æ®·£Àè¼ÇÀ»
´Ù·ê ¼ö ¾ø¾î ¿¹¿Ü¸¦ ´øÁ®¾ß ÇÏÁö¸¸ SQL ServerÀÇ Æ®¸®°Å´Â ±× ÀÚü°¡ Æ®·£Àè¼ÇÀÌ¾î¼ Ãë¼Ò °¡´ÉÇÏ´Ù. ´ÙÀ½ Æ®¸®°Å´Â ÃÖ¾¾ÀÇ ÀԻ縦 °ÅºÎÇÑ´Ù.
CREATE TRIGGER TR_PreventChoi
ON tStaff AFTER INSERT
AS
IF EXISTS (SELECT * FROM inserted WHERE name LIKE
'ÃÖ%')
BEGIN
PRINT
'ÃÖ°¡´Â ¾ÈµÇ!';
ROLLBACK
TRANSACTION;
END
»õ·Î »ðÀÔÇÑ »ç¿øÀÇ Á¤º¸¸¦ Á¶»çÇÏ¿© À̸§ÀÌ ÃÖ·Î ½ÃÀÛÇÏ´Â »ç¶÷ÀÌ ÀÖÀ¸¸é ·Ñ¹éÇÏ¿© Àüü¸¦ »ðÀÔ °ÅºÎÇÑ´Ù. °ÅºÎÇÏ´Â ´ë½Å ƯÁ¤ÇÑ °ªÀ¸·Î °Á¦ º¯°æÇÏ·Á¸é »ðÀÔÇÑ ·¹Äڵ带 ã¾Æ ¿øÇÏ´Â °ªÀ¸·Î °»½ÅÇØ ¹ö¸®¸é µÈ´Ù. ´ÙÀ½ Æ®¸®°Å´Â ÃÖ¾¾¸¦ ÀÔ·ÂÇÏ¸é ±è¾¾·Î º¯°æÇÑ´Ù.
ALTER TRIGGER TR_PreventChoi
ON tStaff AFTER INSERT
AS
BEGIN
UPDATE
tStaff SET name = '±è' + SUBSTRING(name, 2, LEN(name) -
1) WHERE name LIKE 'ÃÖ%';
END
INSTEAD OF Æ®¸®°Å´Â ¿À¶óŬ°ú »ç¿ë ¸ñÀûÀÌ °°´Ù. ÁÖ·Î ºä¿¡ ´ëÇØ »ç¿ëÇÏ¸ç ºä¿¡ ÀÔ·ÂÇÑ Á¤º¸¸¦ °¢ Å×ÀÌºí¿¡ ºÐ¹èÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. vCarMaker ºä¸¦ »ý¼ºÇÑ ÈÄ ´ÙÀ½ Æ®¸®°Å¸¦ Á¤ÀÇÇÑ´Ù.
CREATE TRIGGER TR_AddNewCar
ON vCarMaker INSTEAD OF INSERT
AS
BEGIN
INSERT
INTO tCar (car, capacity, price, maker) SELECT car, capacity, price, maker FROM
inserted;
INSERT
INTO tMaker (maker, factory, domestic) SELECT maker, factory, domestic FROM
inserted;
END
inserted Å×À̺íÀÇ Á¤º¸¸¦ tCar¿Í
tMaker·Î °ñ°í·ç ºÐ¹èÇÏ¿© ³ª´©¾îÁØ´Ù. ¿ø·¡ÀÇ Äõ¸®´Â
½ÇÇàÇÏÁö ¾Ê°í µÎ °³ÀÇ Äõ¸®¸¦ ´ë½Å ½ÇÇàÇÑ´Ù.
´ÙÀ½ Æ®¸®°Å´Â ¼îÇθôÀÇ ¼öÇè»ý ½ÅÀÔ È¸¿ø¿¡ ´ëÇØ ¿¹Ä¡±ÝÀ» µÎ ¹è·Î ´Ã·Á ÁØ´Ù.
CREATE TRIGGER TR_DoubleMoney
ON tMember AFTER INSERT
AS
DECLARE @name CHAR(20)
DECLARE @age INT
SELECT @name = member, @age = age FROM inserted;
IF @age = 18
UPDATE
tMember SET money = money * 2 WHERE member = @name;
AFTER Æ®¸®°Å¸¦ ¹Þ¾ÒÀ¸¹Ç·Î ·¹Äڵ带 ÀÌ¹Ì »ðÀÔÇÑ ÈÄÀÌ´Ù. ÀÌ »óÅ¿¡¼ inserted Å×ÀÌºí¿¡¼ À̸§°ú ³ªÀ̸¦ Á¶»çÇÏ¿© 18¼¼ ¼öÇè»ýÀ̸é UPDATE ¸í·ÉÀ¸·Î ÇØ´ç ȸ¿øÀÇ ¿¹Ä¡±ÝÀ» µÎ ¹è·Î
´Ã·Á ÁØ´Ù. INSERT Æ®¸®°Å¿¡¼ UPDATE ¸í·ÉÀ» ó¸®ÇÏ¿´À¸¹Ç·Î
ÁßøÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ Æ®¸®°Å¸¦ Á¤ÀÇÇØ º¸ÀÚ.
CREATE TRIGGER TR_MoneyChange
ON tMember
AFTER UPDATE
AS
DECLARE @name CHAR(20)
IF UPDATE(money)
BEGIN
SELECT
@name = member FROM inserted;
PRINT
@name + 'ÀÇ ¿¹Ä¡±ÝÀÌ °»½ÅµÇ¾ú½À´Ï´Ù. ºÎÁ¤ÀÌ ¾Æ´ÑÁö È®ÀÎÇØ º¸½Ê½Ã¿À';
END;
½ÅÀÔ È¸¿øÀÌ µé¾î ¿À¸é INSERT Æ®¸®°Å°¡ ¹ß»ýÇÏ¸ç ¼öÇè»ýÀÏ °æ¿ì
¿¬À̾î UPDATE Æ®¸®°Å°¡ ¹ß»ýÇÑ´Ù. SQL Server´Â
µðÆúÆ®·Î 32´Ü°è±îÁö ÁßøÀ» Çã¿ëÇÏÁö¸¸ Àç±Í´Â Çã¿ëÇÏÁö ¾Ê´Â´Ù. Áßø
Çã¿ëÀº ¼¹öÀÇ nested triggers ¿É¼ÇÀ¸·Î, Àç±Í
Çã¿ëÀº µ¥ÀÌÅͺ£À̽ºÀÇ recursive triggers ¿É¼ÇÀ¸·Î Á¶Á¤ÇÑ´Ù.
DDL Æ®¸®°Å´Â ¼¹ö³ª µ¥ÀÌÅͺ£À̽ºÀÇ À̺¥Æ®¿¡ ´ëÇØ ¹ß»ýÇÑ´Ù. ´ÙÀ½ Æ®¸®°Å´Â ¸ðµç ¼¹ö¿¡¼ µ¥ÀÌÅͺ£À̽º°¡ »ý¼º ¹× Æı«µÇ´Â ½ÃÁ¡À» °¨ÁöÇÑ´Ù.
CREATE TRIGGER NewDataBase
ON ALL SERVER
AFTER CREATE_DATABASE, DROP_DATABASE
AS
PRINT '»õ·Î¿î DB°¡ »ý¼º ¶Ç´Â
Æı«µÇ¾ú½À´Ï´Ù.';
¿øÇÑ´Ù¸é ÇØ´ç µ¿ÀÛÀ» ÇÏÁö ¸øÇϵµ·Ï ·Ñ¹éÇϰųª »õ·Î »ý¼ºÇÑ DB¿¡
´ëÇÑ ÃʱâÈ ÀÛ¾÷À» ÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ ¸í·ÉÀ¸·Î »õ·Î¿î µ¥ÀÌÅͺ£À̽º¸¦ »ý¼ºÇß´Ù°¡ Æı«ÇØ º¸ÀÚ.
CREATE DATABASE NewDB
DROP DATABASE NewDB
µÎ ¹ø ¸ðµÎ ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù. DDL Æ®¸®°Å¸¦ »èÁ¦ÇÒ ¶§´Â À̸§»Ó¸¸
¾Æ´Ï¶ó Æ®¸®°ÅÀÇ ¹üÀ§µµ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
DROP TRIGGER NewDataBase ON ALL SERVER
ÀÌ·¸°Ô ÇÏ¸é ¿ø·¡´ë·Î µ¹¾Æ¿Â´Ù. ÀÏ¹Ý °³¹ßÀÚ°¡ DDL Æ®¸®°Å¸¦ ¾µ °æ¿ì´Â ÈçÄ¡ ¾ÊÀ¸¸ç °¡±ÞÀûÀ̸é Á¦¾à Á¶°ÇÀ» ÅëÇØ »ç°í¸¦ ¹æÁöÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.