16-4.SQL ServerÀÇ ÇÁ·Î½ÃÀú

1.»ý¼º ¹× È£Ãâ

SQL ServerÀÇ ÇÁ·Î½ÃÀúµµ °³³ä ¹× »ç¿ë ¸ñÀûÀº ¿À¶óŬ°ú °°Áö¸¸ Á¤ÀÇÇÏ´Â ±¸¹®Àº ¸¹ÀÌ ´Ù¸£´Ù. º¯¼ö³ª Á¦¾î¹®ºÎÅÍ ¹®¹ýÀÌ ´Ù¸£´Ï ¾î¿ ¼ö ¾ø´Â ºÎºÐÀ̸ç Çü½ÄÀº »õ·Î ÀÍÇô¾ß ÇÑ´Ù.

 

CREATE PROCEDURE À̸§

[Àμö ¸ñ·Ï]

[WITH ¿É¼Ç]

AS

º»Ã¼

 

À̸§Àº ÀÚÀ¯·Ó°Ô ºÙÀÏ ¼ö ÀÖÁö¸¸ SP_ Á¢µÎ¾î´Â ½Ã½ºÅÛ ÇÁ·Î½ÃÀú¸¦ ÀǹÌÇϹǷΠÁ¢µÎ¸¦ ºÙÀÌÁö ¾Ê°Å³ª ¾Æ´Ï¸é PROC_ Á¢µÎ¸¦ ºÙÀδÙ. À̸§ÀÌ #À̳ª ##À¸·Î ½ÃÀÛÇϸé tempdb¿¡ ÀúÀåµÇ´Â Àӽà ÇÁ·Î½ÃÀú¸¦ »ý¼ºÇϴµ¥ ¼º´É»óÀÇ ÀÌÁ¡ÀÌ ¾ø¾î Àß »ç¿ëÇÏÁö ¾Ê´Â´Ù.

´ÙÀ½Àº Àμö·Î Àü´ÞÇÑ µµ½ÃÀÇ Àα¸¼ö¸¦ Á¶»çÇÏ¿© Ãâ·ÂÇÏ´Â ÇÁ·Î½ÃÀúÀÌ´Ù. ¶È°°Àº µ¿ÀÛÀ» ÇÏÁö¸¸ ¿À¶óŬÀÇ ÇÁ·Î½ÃÀú¿Í ºñ±³ÇØ º¸¸é ¸¹Àº ºÎºÐÀÌ ´Ù¸£´Ù.

 

CREATE PROCEDURE PROC_GetCityPopu

     @p_name CHAR(10)

AS

BEGIN

     SELECT popu FROM tCity WHERE name = @p_name;

END

 

Àμö ¸ñ·ÏÀ» °ýÈ£·Î °¨½ÎÁö ¾ÊÀ¸¸ç °¡º¯ ±æÀÌ Å¸ÀÔÀº CHAR·Î¸¸ ¾µ ¼ö´Â ¾ø°í CHAR(10)À¸·Î ±æÀ̸¦ ´Ù ¹àÇô¾ß ÇÑ´Ù. °ªÀ» Ãâ·ÂÇÒ ¶§´Â ±»ÀÌ º¯¼ö¿¡ ´ëÀÔÇÒ ÇÊ¿ä ¾øÀÌ SELECT ¹®À¸·Î ¹Ù·Î Ãâ·ÂÇÒ ¼ö ÀÖ¾î Æí¸®ÇÏ´Ù. 

º»Ã¼ÀÇ ¸í·ÉÀÌ Çϳª»ÓÀ̸é BEGIN~END ºí·ÏÀº ¾ø¾îµµ µÇÁö¸¸ ÀÌÈÄÀÇ °ü¸®¸¦ À§ÇØ ºí·ÏÀ¸·Î ¹­¾î µÎ´Â °ÍÀÌ ÁÁ´Ù. ÇÁ·Î½ÃÀú¸¦ È£ÃâÇÒ ¶§´Â EXECUTE ¶Ç´Â ÁÙ¿©¼­ EXEC ¸í·ÉÀ» »ç¿ëÇÑ´Ù. ´Üµ¶À¸·Î È£ÃâÇÒ ¶§´Â EXEC ¸í·É ÀÚü¸¦ »ý·«ÇÒ ¼ö ÀÖÁö¸¸ EXEC°¡ ÀÖÀ¸¸é µ¶¸³ ¹èÄ¡·Î ½ÇÇàÇÏ´Â ¹Ì¼¼ÇÑ Â÷ÀÌ°¡ ÀÖ´Ù.

Àμö´Â ´ëÀÔ¹® Çü½ÄÀ¸·Î °ªÀ» ´ëÀÔÇϰųª ¾Æ´Ï¸é °ª¸¸ ³ª¿­Çصµ µÈ´Ù. Àμö¸í ¾øÀÌ °ª¸¸ ³ª¿­ÇÏ´Â °ÍÀÌ °£ÆíÇÏÁö¸¸ ¼ø¼­¸¦ ÁöÄÑ¾ß ÇÑ´Ù. ´ëÀÔ¹® Çü½ÄÀº ¼ø¼­¿¡ »ó°ü¾øÀÌ °ªÀ» Àü´ÞÇÒ ¼ö ÀÖ¾î µðÆúÆ® Àμö¸¦ °Ç³Ê¶Û ¶§ Æí¸®ÇÏ´Ù. ´ÙÀ½ ¼¼ Çü½Ä ¸ðµÎ °¡´ÉÇÏ´Ù.

 

EXEC PROC_GetCityPopu @p_name = '¼­¿ï';

EXEC PROC_GetCityPopu '¼­¿ï';

PROC_GetCityPopu '¼­¿ï';

 

´ÙÀ½ Çü½ÄÀ¸·Î È£ÃâÇÏ¸é ¿¡·¯ÀÌ´Ù. ÇÁ·Î½ÃÀú°¡ ¿ä±¸ÇÏ´Â Àμö¸¦ Àü´ÞÇÏÁö ¾ÊÀ¸¸é ¿¡·¯À̸ç Àμö¸¦ °ýÈ£ ¾È¿¡ Àû´Â Çü½Äµµ Áö¿øÇÏÁö ¾Ê´Â´Ù.

 

EXEC PROC_GetCityPopu;

EXEC PROC_GetCityPopu('¼­¿ï');

 

ÇÁ·Î½ÃÀú¸¦ ¼öÁ¤ÇÏ´Â ¿ø·ÐÀûÀÎ ¹æ¹ýÀº DROP PROCEDURE ¸í·ÉÀ¸·Î »èÁ¦ÇÑ ÈÄ »õ·Î ¸¸µå´Â °ÍÀÌ´Ù. °ø½ÄÀûÀÎ ¹æ¹ýÀ¸·Î ALTER PROCEDURE ¸í·ÉÀÌ ÀÖÀ¸³ª Ç¥ÁØÀº ¾Æ´Ï°í SQL Server¿¡¼­¸¸ °¡´ÉÇÏ´Ù. º¯¼ö¿¡ °ªÀ» ´ëÀÔÇÑ ÈÄ º¯¼ö¸¦ Ãâ·ÂÇÏ´Â Çü½ÄÀ¸·Î ¼öÁ¤ÇØ º¸ÀÚ.

 

ALTER PROCEDURE PROC_GetCityPopu

     @p_name CHAR(10)

AS

DECLARE

     @popu INT

BEGIN

     SELECT @popu = popu FROM tCity WHERE name = @p_name;

     PRINT @popu

END

 

¿À¶óŬÀº º¯¼ö¸¦ ÅëÇØ °ªÀ» Ãâ·ÂÇϴµ¥ SQL Serverµµ ºñ½ÁÇÑ ¹æ¹ýÀ» ¾µ ¼ö ÀÖ´Ù. ±×·¯³ª ¿¹Á¦ ¼öÁØ¿¡¼­³ª °á°ú¸¦ Ãâ·ÂÇØ º¼ »Ó °³¹ß Áß¿¡´Â ÇÁ·Î½ÃÀú°¡ °ªÀ» Ãâ·ÂÇÒ °æ¿ì°¡ °ÅÀÇ ¾ø´Ù. SQL Server¿¡¼­´Â ±×³É SELECT ¹®À¸·Î °á°ú¸¦ È®ÀÎÇØ º¸¸é µÈ´Ù.

SQL Server´Â ¿À¶óŬ°ú´Â ´Þ¸® ÇÁ·Î½ÃÀú¸¦ Á¤ÀÇÇÒ ¶§ °´Ã¼ÀÇ À¯È¿¼ºÀ» Á¡°ËÇÏÁö ¾Ê´Â´Ù. ´ÙÀ½ ÇÁ·Î½ÃÀú´Â Á¸ÀçÇÏÁö ¾Ê´Â tCity2 Å×À̺íÀ» ÂüÁ¶ÇÏÁö¸¸ ÀÌ»ó ¾øÀÌ ÄÄÆÄÀϵȴÙ. ¹°·Ð Å×À̺íÀÌ Á¸ÀçÇÏÁö ¾Ê¾Æ ½ÇÇà½Ã ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.

 

ALTER PROCEDURE PROC_GetCityPopu

     @p_name CHAR(10)

AS

BEGIN

     SELECT popu FROM tCity2 WHERE name = @p_name;

END

 

À̸¦ Áö¿¬µÈ À̸§ È®ÀÎÀ̶ó°í ÇÑ´Ù. ±×·¡¼­ ÇÁ·Î½ÃÀú¸¦ ¸ÕÀú ¸¸µé¾î µÎ°í Å×À̺íÀ» ³ªÁß¿¡ ¸¸µé¾îµµ »ó°ü¾øÀ¸¸ç Áß°£¿¡ Å×À̺íÀÌ Àá½Ã »ç¶óÁ®µµ º° ¹®Á¦ ¾ø´Ù. ½ÇÇàÇϱâ Àü¿¡ Å×À̺íÀ» ¸¸µé¾î ³õ±â¸¸ ÇÏ¸é µÈ´Ù.

2.Àμö¿Í ¸®ÅÏ

Àμö´Â ÇÊ¿äÇÑ ¸¸Å­ ¹ÞÀ» ¼ö ÀÖ°í µðÆúÆ®°ªÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½Àº p_member¿¡°Ô p_bonus¸¦ Áö±ÞÇÏ´Â ÇÁ·Î½ÃÀúÀÌ´Ù.

 

CREATE PROCEDURE PROC_GrantBonus

     @p_member CHAR(20),

     @p_bonus INT = 100

AS

BEGIN

    UPDATE tMember SET money = money + @p_bonus WHERE member = @p_member;

END;

 

µÎ °³ÀÇ Àμö¸¦ ¹ÞÀ¸¸ç p_bonus´Â µðÆúÆ®°ª 100À» ÁöÁ¤Çß´Ù. µÎ Àμö¸¦ ¼ø¼­´ë·Î ´Ù Àü´ÞÇϰųª ¾Æ´Ï¸é µÚÂÊ Àμö´Â »ý·«Çصµ µðÆúÆ®°ª 100ÀÌ Àû¿ëµÈ´Ù.

 

PROC_GrantBonus 'ÃáÇâ', 2000;

PROC_GrantBonus 'ÃáÇâ';

 

ÀμöÀÇ À̸§À» ¹àÈ÷¸é È£Ãâ¹®ÀÌ ±æ¾îÁöÁö¸¸ ¼ø¼­¿¡ »ó°ü¾øÀÌ Àü´ÞÇÒ ¼ö ÀÖ´Â ÀÌÁ¡ÀÌ ÀÖ´Ù. ´ÙÀ½ µÎ ±¸¹® ¸ðµÎ Àß µ¿ÀÛÇÑ´Ù.

 

PROC_GrantBonus @p_member = 'ÃáÇâ', @p_bonus = 2000;

PROC_GrantBonus @p_bonus = 2000, @p_member = 'ÃáÇâ';

 

Ãâ·Â¿ë Àμö´Â µÚ¿¡ OUTPUT Å°¿öµå¸¦ ºÙÀδÙ. ´ÙÀ½ ÇÁ·Î½ÃÀú´Â µµ½ÃÀÇ Àα¸¼ö¸¦ Á¶»çÇÏ¿© Ãâ·Â¿ë Àμö·Î ¸®ÅÏÇÑ´Ù.

 

CREATE PROCEDURE PROC_OutCityPopu

     @p_name CHAR(10),

     @o_popu INT OUTPUT

AS

BEGIN

    SELECT @o_popu = popu FROM tCity WHERE name = @p_name;

END;

 

È£ÃâÇÒ ¶§´Â º¯¼ö¸¦ ¼±¾ðÇÏ¿© Ãâ·Â¿ë Àμö·Î Àü´ÞÇ쵂 OUTPUT Å°¿öµå¸¦ ¹àÈù´Ù. ÇÁ·Î½ÃÀú°¡ Àμö¿¡ °ªÀ» ´ëÀÔÇØ ÁÖ¸é ÀÌ °ªÀ» È£ÃâÃø¿¡¼­ »ç¿ëÇÑ´Ù.

 

DECLARE @popu INT;

EXECUTE PROC_OutCityPopu '¼­¿ï', @popu OUTPUT;

PRINT '¼­¿ïÀÇ Àα¸´Â ' + CAST(@popu AS VARCHAR(10)) + '¸¸¸íÀÔ´Ï´Ù.';

 

ÇÁ·Î½ÃÀú°¡ È£Ãâ¿øÀ¸·Î °ªÀ» µ¹·ÁÁÖ´Â ÀϹÝÀûÀÎ ¹æ¹ýÀº Ãâ·Â¿ë ÀμöÀÌ´Ù. ¿©·¯ °³ÀÇ Ãâ·Â¿ë Àμö·Î ¸¹Àº ¾çÀÇ Á¤º¸¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ°í ŸÀÔÀÇ Á¦¾àµµ ¾ø´Ù. ÇÏÁö¸¸ È£Ãâ¿øÀÌ º¯¼ö¸¦ ¼±¾ðÇØ¾ß ÇÑ´Ù´Â Á¡¿¡¼­ ¹ø°Å·Î¿îµ¥ Á¤¼ö°ª Çϳª¸¦ ¸®ÅÏÇÒ ¶§´Â RETURN ¹®ÀÌ °£ÆíÇÏ´Ù.

RETURN ¸í·ÉÀº ÇÁ·Î½ÃÀúÀÇ ³ª¸ÓÁö ¸í·ÉÀ» ¹«½ÃÇÏ°í Áï½Ã Á¾·áÇϸç Á¤¼ö°ª Çϳª¸¦ ¸®ÅÏÇÑ´Ù. ¿À·ÎÁö Á¤¼ö¸¸ ¸®ÅÏÇÒ ¼ö ÀÖÀ¸¸ç ÀÓÀÇ Å¸ÀÔÀ» ¸®ÅÏÇÒ ¼ö´Â ¾ø´Ù. ´ÙÀ½ ÇÁ·Î½ÃÀú´Â µµ½ÃÀÇ Àα¸¼ö¸¦ Á¶»çÇÏ¿© ¸®ÅÏÇÑ´Ù.

 

CREATE PROCEDURE PROC_RetCityPopu

     @p_name CHAR(10)

AS

DECLARE

     @popu INT;

BEGIN

    SELECT @popu = popu FROM tCity WHERE name = @p_name;

    RETURN @popu;

END;

 

È£Ã⿹´Â ´ÙÀ½°ú °°´Ù. ÇÁ·Î½ÃÀúÀÇ ½ÇÇ๮ ÀÚü¸¦ º¯¼ö¿¡ ´ëÀÔÇÏ¿© »ç¿ëÇÑ´Ù.

 

DECLARE @popu INT;

EXECUTE @popu = PROC_RetCityPopu '¼­¿ï';

PRINT '¼­¿ïÀÇ Àα¸´Â ' + CAST(@popu AS VARCHAR(10)) + '¸¸¸íÀÔ´Ï´Ù.';

 

ÇÁ·Î½ÃÀú°¡ °ªÀ» ¸®ÅÏÇÏ´õ¶óµµ ½Ä³»¿¡¼­ ÇÁ·Î½ÃÀú¸¦ »ç¿ëÇÒ ¼ö´Â ¾ø´Ù. ´ÙÀ½ µÎ ¸í·ÉÀº ¸ðµÎ ¿¡·¯ÀÌ´Ù. ÀÌ·± ¿ëµµ·Î ¾²°í ½Í´Ù¸é ÇÔ¼ö¸¦ ¸¸µé¾î¾ß ÇÑ´Ù.

 

PRINT '¼­¿ïÀÇ Àα¸´Â ' + CAST(PROC_RetCityPopu '¼­¿ï' AS VARCHAR(10)) + '¸¸¸íÀÔ´Ï´Ù';

SELECT PROC_RetCityPopu '¼­¿ï';

 

ÇÁ·Î½ÃÀúÀÇ RETURN ¹®Àº °á°ú°ª ¸®ÅϺ¸´Ù´Â ¿¡·¯ 󸮿ëÀÌ´Ù. ÇÁ·Î½ÃÀú Á¦ÀÛÀÚ°¡ ¹ß»ý °¡´ÉÇÑ ¿¡·¯ Äڵ带 Á¤ÀÇÇÏ°í ¿¡·¯ »óȲ½Ã Äڵ带 ¸®ÅÏÇÏ´Â ½ÄÀÌ´Ù. È£Ãâ¿øÀº ÇÁ·Î½ÃÀúÀÇ ¸®ÅÏ°ªÀ» Á¡°ËÇÏ¿© ¿¡·¯¸¦ ó¸®ÇÑ´Ù.

 

CREATE PROCEDURE GetWantedValue

Àμö¸ñ·Ï

AS

IF (Àμö°ªÀÌ À߸øµÆÀ½)

     RETURN 1

IF (Å×À̺íÀÌ ¾øÀ½)

     RETURN 2

IF (±ÇÇÑÀÌ ¾øÀ½)

     RETURN 3

°ªÀ» ±¸Çϴ ó¸®

RETURN 0

DECLARE @Result INT;

EXEC @Result=GetWantedValue;

IF @Result = 0 THEN

     ÇÏ°í ½ÍÀº ÀÏ;

ELSE IF @Result = 1 THEN

     PRINT 'Àμö°¡ À߸øµÆÀݾÆ!';

ELSE IF @Result = 2 THEN

     PRINT '¾î! Å×À̺íÀÌ ¾ø³×';

ELSE IF @Result = 3 THEN

     PRINT '³Í ÀÌ °ªÀ» ÀÐÀ» ÀÚ°ÝÀÌ ¾ø¾î';

 

ÇÁ·Î½ÃÀúÀÇ Äڵ带 Á¤È®È÷ ÀÛ¼ºÇß´õ¶óµµ Ç×»ó Á¦´ë·Î ½ÇÇàµÇ´Â °ÍÀº ¾Æ´Ï´Ù. ÇÁ·Î½ÃÀú¸¦ ¸ðµâ·Î¼­ È°¿ëÇÏ·Á¸é ¾ÈÁ¤¼ºÀ» È®º¸ÇØ¾ß ÇÑ´Ù. ¿ÜºÎ ȯ°æÀÇ º¯È­³ª ¹«È¿ÇÑ Àμö·Î ÀÎÇØ ¿¹¿Ü°¡ ¹ß»ýÇÒ °¡´É¼ºÀº Ç×»ó ÀÖ´Ù. ´ÙÀ½ ÇÁ·Î½ÃÀú´Â tCity¿¡ ¼­¿ïÀÌ »·È÷ Àִµ¥ ¶Ç »ðÀÔÇÏ¿© ÀϺη¯ ¿¹¿Ü¸¦ À¯¹ßÇÑ´Ù.

 

CREATE PROCEDURE PROC_InsertSeoul

AS

BEGIN

     INSERT INTO tCity VALUES ('¼­¿ï',605,974,'y','°æ±â');

END

 

´ç¿¬È÷ ½ÇÆÐÇÏ¸ç ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. ¿¡·¯°¡ ¹ß»ýÇϵµ·Ï ³» ¹ö·Á µÎ´Â °Íº¸´Ù´Â ÇÁ·Î½ÃÀú ³»ºÎ¿¡¼­ ¿¡·¯¸¦ ó¸®ÇÏ°í ´õ Ä£ÀýÇÑ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â °ÍÀÌ ÁÁ´Ù. @@ERROR ½Ã½ºÅÛ ÇÔ¼ö´Â ÃÖÈÄ ½ÇÇàÇÑ Äõ¸®ÀÇ °á°ú°ªÀÌ¸ç ¼º°ø½Ã´Â 0, ¿À·ù ¹ß»ý½Ã´Â ¿¡·¯ ¹øÈ£°ªÀ» °¡Áø´Ù.

 

ALTER PROCEDURE PROC_InsertSeoul

AS

BEGIN

     INSERT INTO tCity VALUES ('¼­¿ï',605,974,'y','°æ±â');

     IF @@ERROR != 0

     BEGIN

          PRINT('»õ ·¹Äڵ带 »ðÀÔÇÏÁö ¸øÇß½À´Ï´Ù.');

     END

END

 

»ðÀÔ ¸í·É ½ÇÇà ÈÄ @@ERROR¸¦ Á¡°ËÇØ º¸°í 0ÀÌ ¾Æ´Ï¸é ¿¡·¯°¡ ¹ß»ýÇßÀ½À» »ó¼¼È÷ ¾Ë¸°´Ù. ±×·¯³ª ÀÌ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϱâ Àü¿¡ ÀÌ¹Ì ¿¹¿Ü°¡ ¹ß»ýÇÏ¸ç ¸Þ½ÃÁö´Â ±× ÈÄ¿¡ Ãâ·ÂµÈ´Ù. ´õ Àû±ØÀûÀ¸·Î ó¸®ÇÏ·Á¸é ¿¹¿Ü ó¸® ±¸¹®À» »ç¿ëÇÑ´Ù.

 

ALTER PROCEDURE PROC_InsertSeoul

AS

BEGIN

     BEGIN TRY

          INSERT INTO tCity VALUES ('¼­¿ï',605,974,'y','°æ±â');

     END TRY

 

     BEGIN CATCH

          PRINT '¿¡·¯ ¹øÈ£ : ' + CAST(ERROR_NUMBER() AS VARCHAR(10));

          PRINT '¿¡·¯ ¸Þ½ÃÁö : ' + ERROR_MESSAGE();

     END CATCH

END

 

¿¹¿Ü°¡ ¹ß»ýÇÒ¸¸ÇÑ ±¸¹®À» BEGIN TRY ºí·Ï¿¡¼­ ½ÇÇàÇÏ°í BEGIN CATCH ºí·Ï¿¡¼­ ¿¹¿ÜÀÇ Á¾·ù¸¦ ÆǺ°ÇÏ¿© ¿øÇϴ ó¸®¸¦ ¼öÇàÇÑ´Ù. Àû¾îµµ ½Ã½ºÅÛÀÌ »Õ¾î ³»´Â ºÒÄ£ÀýÇÏ°í ¹«½Ã¹«½ÃÇÑ ¸Þ½ÃÁöº¸´Ù´Â °ø¼ÕÇÏ°í »ó¼¼ÇÑ ¸Þ½ÃÁö¸¦ º¸¿©ÁÙ ¼ö ÀÖ´Ù.

ÇÁ·Î½ÃÀú¿¡ Áß¿äÇÑ ±ÔÄ¢À̳ª º¸¾È»ó Ä¡¸íÀûÀÎ Á¤º¸°¡ ÀÖ´Ù¸é ¾ÏȣȭÇØ¾ß ÇÑ´Ù. WITH ENCRYPTION ¿É¼ÇÀº ÇÁ·Î½ÃÀú º»¹®À» ¾ÏȣȭÇÏ¿© ½ÇÇàÀº µÇÁö¸¸ ³»¿ëÀ» ´Ù½Ã º¸°Å³ª ¼öÁ¤ÇÒ ¼ö ¾ø´Ù. ½ÉÁö¾î ¸¸µç »ç¶÷µµ º¼ ¼ö ¾ø¾î ¿ø·¡ÀÇ º»¹®À» µû·Î Àß º¸°üÇØ µÎ¾î¾ß ÇÑ´Ù.

¼º´ÉÀ» À§ÇØ ÇÁ·Î½ÃÀú´Â ¹Ì¸® ÄÄÆÄÀÏÇØ µÎ´Âµ¥ Àμö¿¡ µû¶ó ÃÖÀûÈ­ ¹æ¹ýÀÌ ¹Ù²î°Å³ª ¿ÜºÎÀÇ º¯È­¿¡ ÀÇÇØ ÄÄÆÄÀÏÇØ ³õÀº ½ÇÇà °èȹÀÌ ºÎÀûÀýÇØÁö±âµµ ÇÑ´Ù. ÀÌ·² ¶§´Â WITH RECOMPILE ¿É¼ÇÀ» »ç¿ëÇÑ´Ù. ÇÁ·Î½ÃÀú Á¤Àǹ®¿¡ ÀÌ ¿É¼ÇÀ» ÁöÁ¤ÇÏ¸é ½ÇÇà½Ã¸¶´Ù ÀçÄÄÆÄÀÏÇϸç EXEC ¸í·É¿¡ ÀÌ ¿É¼ÇÀ» ÁÖ¸é ÀçÄÄÆÄÀÏ ÈÄ ½ÇÇàÇÑ´Ù.

¶Ç´Â sp_recompile ÇÁ·Î½ÃÀú·Î ÀçÄÄÆÄÀÏÀÌ ÇÊ¿äÇÑ ÇÁ·Î½ÃÀúÀÓÀ» ÁöÁ¤ÇØ ³õÀ» ¼öµµ ÀÖ°í DBCC FREEPROCCACHE ¸í·ÉÀ¸·Î ij½Ã¸¦ ºñ¿ö ´ÙÀ½ ½ÇÇà½Ã °­Á¦·Î ÀçÄÄÆÄÀÏÇϵµ·Ï ÇÑ´Ù. ÀçÄÄÆÄÀÏ ¿É¼ÇÀº ¼º´É¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â ÈùÆ®ÀÏ »Ó µ¿ÀÛ¿¡´Â ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù.

3.½Ã½ºÅÛ ÇÁ·Î½ÃÀú

SQL Server´Â ½Ã½ºÅÛ °ü¸®¸¦ À§ÇØ ¹Ì¸® Á¤ÀÇÇÑ ½Ã½ºÅÛ ÇÁ·Î½ÃÀú¸¦ Á¦°øÇÑ´Ù. ÁַΠȯ°æÀ» ¼³Á¤Çϰųª Á¶»çÇÏ°í DB ¿ÀºêÁ§Æ®¸¦ °ü¸®ÇÏ´Â ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù. °ü¸® ½ºÆ©µð¿ÀÀÇ master/ÇÁ·Î±×·¡¹Ö ±â´É/ÀúÀå ÇÁ·Î½ÃÀú ³ëµå¸¦ º¸¸é sp_·Î ½ÃÀÛÇÏ´Â ¼ö¸¹Àº ½Ã½ºÅÛ  ÇÁ·Î½ÃÀú°¡ ÀÖÀ¸¸ç Æ˾÷¿¡¼­ ¼öÁ¤À» ¼±ÅÃÇÏ¸é ¼Ò½ºµµ º¼ ¼ö ÀÖ´Ù.

ÀÌ Äڵ带 ºÐ¼®ÇØ º¸¸é ÇÁ·Î½ÃÀú Á¦ÀÛ°ú SQL ServerÀÇ ±¸Á¶¿¡ ´ëÇØ ¸¹Àº °ÍÀ» ¹è¿ï ¼ö ÀÖ´Ù. SQL Server ¼³Ä¡ Á÷ÈĺÎÅÍ µî·ÏµÇ¾î ÀÖ¾î ¾ðÁ¦µçÁö °£ÆíÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ Áß ÀÚÁÖ »ç¿ëÇÏ´Â ½Ç¿ëÀûÀÎ ÇÁ·Î½ÃÀú ¸î °¡Áö¸¦ ¾Ë¾Æº¸ÀÚ.

 

ÇÁ·Î½ÃÀú

¼³¸í

sp_databases

¼­¹öÀÇ µ¥ÀÌÅͺ£À̽º ¸ñ·ÏÀ» ³ª¿­ÇÑ´Ù.

sp_tables

ÇöÀç DBÀÇ Å×ÀÌºí ¸ñ·ÏÀ» ³ª¿­ÇÑ´Ù. Àμö¸¦ Àü´ÞÇϸé ƯÁ¤ Å×ÀÌºí¿¡ ´ëÇÑ Á¤º¸¸¸ º¸¿©ÁØ´Ù.

sp_help

DB ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸¸¦ Á¶»çÇÏ¿© Ãâ·ÂÇÑ´Ù. sp_help 'tCity'´Â µµ½Ã Á¤º¸ Å×À̺íÀÇ ±¸Á¶¿Í Á¦¾à »çÇ×À» »ó¼¼È÷ º¸¿©ÁØ´Ù.

sp_helptext

ÇÁ·Î½ÃÀú, ÇÔ¼ö, Æ®¸®°Å µîÀÇ ¼Ò½º Äڵ带 Ãâ·ÂÇÑ´Ù. sp_helptext 'PROC_GetCityPopu' ¸í·ÉÀ» ½ÇÇàÇØ º¸ÀÚ.

sp_configure

SQL ServerÀÇ Àü¿ª ¼³Á¤ »óŸ¦ Á¶»çÇϰųª @configname, @configvalue Àμö·Î ¿É¼Ç°ú °ªÀ» ÁöÁ¤ÇÏ¿© º¯°æÇÑ´Ù.

sp_helpsort

Á¤·Ä ¼ø¼­¿Í ¹®ÀÚ ÁýÇÕÀ» Á¶»çÇÑ´Ù.

sp_rename

DB ¿ÀºêÁ§Æ®ÀÇ À̸§À» º¯°æÇÑ´Ù. Á¦¾àÀ̳ª ±ÇÇÑÀ» ±×´ë·Î À¯ÁöÇÑä À̸§¸¸ º¯°æÇÑ´Ù.

 

½Ã½ºÅÛ ÇÁ·Î½ÃÀú´Â ÀÏÁ¾ÀÇ À¯Æ¿¸®Æ¼À̸ç ÆíÀÇ ±â´ÉÀ» Á¦°øÇÑ´Ù. ÀÌ ¿Ü¿¡µµ ¼ö¸¹Àº ½Ã½ºÅÛ ÇÁ·Î½ÃÀú°¡ Á¤ÀǵǾî ÀÖÀ¸¸ç µµ¿ò¸»µµ »ó¼¼ÇÏ°Ô Àß Á¤¸®µÇ¾î ÀÖ´Ù. ¼ö½Ã·Î ·¹ÆÛ·±½º¸¦ ã¾Æ º¸°í ¾µ¸¸ÇÑ ÇÁ·Î½ÃÀú¸¦ ÀÍÇô º¸ÀÚ.

È®Àå ÇÁ·Î½ÃÀú´Â SQL Server ¿ÜºÎÀÇ ÀÛ¾÷À» ó¸®ÇÑ´Ù. ¼­¹öÀÇ ¿ë·®ÀÌ ºÎÁ·Çϰųª Ä¡¸íÀûÀÎ ¿¡·¯°¡ ¹ß»ýÇÏ¸é °ü¸®ÀÚ¿¡°Ô ÇÚµåÆù ¹®ÀÚ³ª ¸ÞÀÏ·Î ÀÌ »ç½ÇÀ» ¾Ë·Á¾ß ÇÑ´Ù. SQLÀº µ¥ÀÌÅ͸¸ °ü¸®ÇÏ´Â ¾ð¾î¿©¼­ ÀÌ·± ¸í·É±îÁö´Â ó¸®ÇÒ ¼ö ¾ø´Ù. ±×·¡¼­ ³×ÀÌƼºê ¾ð¾î·Î ÀÛ¼ºÇÑ È®Àå ÇÁ·Î½ÃÀúÀÇ µµ¿òÀ» ¹Þ¾Æ¾ß ÇÑ´Ù. È®Àå ÇÁ·Î½ÃÀú´Â SQL Server API¸¦ »ç¿ëÇÏ¿© C¾ð¾î·Î ¸¸µé¸ç DLL ÇüÅ·Πµ¿ÀÛÇÑ´Ù.

È®Àå ÇÁ·Î½ÃÀú´Â ½Ã½ºÅÛ ¸í·É±îÁö ¼öÇàÇÒ ¼ö ÀÖ¾î SQL ServerÀÇ ±â´ÉÀ» ¹«ÇÑÈ÷ È®ÀåÇÒ ¼ö ÀÖÁö¸¸ À߸ø »ç¿ëÇÏ¸é ¿ÀÈ÷·Á ¼º´ÉÀ» ÀúÇØÇϰųª ¾ÈÁ¤¼ºÀ» À§ÇùÇÒ ¼öµµ ÀÖ´Ù. ±×·¡¼­ ¿äÁòÀº ´å³Ý ÇÁ·¹ÀÓ¿öÅ©ÀÇ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â CLR ÇÁ·Î½ÃÀú¸¦ ´õ ±ÇÀåÇÑ´Ù. ½Ã½ºÅÛ ±â´ÉÀ» È®ÀåÇÏ´Â ¿ëµµ¿©¼­ »ç¿ëÀÚ DB¿¡´Â ¾µ ¼ö ¾ø°í master DB¿¡¸¸ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.

4.»ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö

»ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö´Â ¸®ÅÏ°ªÀÇ Á¾·ù¿¡ µû¶ó ´ÜÀÏ °ªÀ» ¸®ÅÏÇÏ´Â ½ºÄ®¶ó ÇÔ¼ö¿Í °á°ú¼ÂÀ» ¸®ÅÏÇÏ´Â Å×À̺í ÇÔ¼ö·Î ±¸ºÐµÇ¸ç Å×À̺í ÇÔ¼ö´Â ÀζóÀÎ Å×À̺í°ú ´ÙÁß¹® Å×À̺í·Î ´Ù½Ã ¼¼ºÐÈ­µÈ´Ù. ´ÙÀ½Àº °¡Àå °£´ÜÇÑ ½ºÄ®¶ó ÇÔ¼öÀÌ´Ù.

 

CREATE FUNCTION FN_AddInt(@a INT, @b INT) RETURNS INT

AS

BEGIN

     RETURN @a + @b;

END

 

ÇÔ¼ö¸íÀº °ü½ÀÀûÀ¸·Î Á¢µÎ FN_À» ºÙÀÌ¸ç °ýÈ£ ¾È¿¡ Àμö ¸ñ·ÏÀ» Àû°í RETRUNS Å°¿öµå·Î ¸®ÅÏÇÒ °ªÀÇ Å¸ÀÔÀ» ÁöÁ¤ÇÑ´Ù. ÇÔ¼ö º»Ã¼¿¡¼­´Â °ªÀ» °è»êÇÑ ÈÄ RETURN ¸í·ÉÀ¸·Î °ªÀ» ¸®ÅÏÇÑ´Ù. º»Ã¼¿¡¼­´Â Á¦¾î¹®, Äõ¸®¹® µîÀ» ÀÚÀ¯·Ó°Ô ±â¼úÇÒ ¼ö ÀÖÁö¸¸ ´ÙÀ½ µ¿ÀÛÀº ÇÒ ¼ö ¾ø´Ù.

 

l Å×À̺íÀ» ÀÐÀ» ¼ö´Â À־ »èÁ¦Çϰųª º¯°æÇÒ ¼ö´Â ¾ø´Ù.

l µü ÇϳªÀÇ °á°ú¸¸ ¸®ÅÏÇÑ´Ù.

l ¿¹¿Ü ó¸® ±¸¹®Àº »ç¿ëÇÒ ¼ö ¾ø´Ù.

l ¿ÜºÎ º¯¼öÀÇ °ªÀ» SET ¹®À¸·Î º¯°æÇÒ ¼ö ¾ø´Ù.

 

ÇÔ¼öÀÇ º»ºÐÀº °ªÀ» °è»êÇÏ´Â °ÍÀÌÁö µ¿ÀÛÀ» ó¸®ÇÏ´Â °ÍÀÌ ¾Æ´Ï¾î¼­ °ªÀ» ±¸ÇÏ´Â °Í ÀÌ¿ÜÀÇ µ¿ÀÛÀ» Çؼ­´Â ¾ÈµÈ´Ù. FN_AddInt ÇÔ¼ö´Â µÎ °³ÀÇ Á¤¼ö @a, @b¸¦ Àü´Þ¹Þ¾Æ µÎ Á¤¼ö¸¦ ´õÇÑ ÇÕÀ» ¸®ÅÏÇÑ´Ù. ÇÔ¼ö´Â Á¤ÀÇÇÑ »ç¶÷¸¸ È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç È£ÃâÇÒ ¶§ ½ºÅ°¸¶¸íÀ» ºÙÀδÙ. DB¸í±îÁö´Â ±»ÀÌ ºÙÀÌÁö ¾Ê¾Æµµ »ó°ü¾ø´Ù. Àμö´Â °ýÈ£ ¾È¿¡ Àü´ÞÇÑ´Ù.

 

SELECT Study.dbo.FN_AddInt(2, 3);

 

¸®ÅÏ°ªÀ» È®ÀÎÇÏ·Á¸é SELECT ¹®À̳ª PRINT ¸í·É ´ÙÀ½¿¡ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ½ºÄ®¶ó ÇÔ¼ö È£Ãâ¹®Àº ÇϳªÀÇ °ªÀ» ¸®ÅÏÇϹǷΠŸÀÔ¸¸ ÀÏÄ¡ÇÑ´Ù¸é Çʵ峪 º¯¼ö°¡ ¿Ã ¼ö ÀÖ´Â ¸ðµç °÷¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Å×À̺íÀº ¾Æ´Ï¾î¼­ FROM Àý¿¡´Â ¿Ã ¼ö ¾ø´Ù.

Å×À̺í ÇÔ¼ö´Â ¸®ÅÏ Å¸ÀÔÀ» TABLE·Î ÁöÁ¤ÇÏ¸ç º»Ã¼´Â °á°ú¼ÂÀ» »ý¼ºÇÏ´Â SELECT ¹® Çϳª·Î ±¸¼ºÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â Áö¿ªÀÇ À̸§À» Àü´Þ¹Þ¾Æ ÀÌ Áö¿ªÀÇ µµ½Ã ¸ñ·ÏÀ» °á°ú¼ÂÀ¸·Î ¸¸µé¾î ¸®ÅÏÇÑ´Ù.

 

CREATE FUNCTION FN_GetCity(@region CHAR(10))

RETURNS TABLE

AS

RETURN SELECT * FROM tCity WHERE region = @region;

 

º»Ã¼´Â SELECT °á°ú¸¦ ¸®ÅÏÇÏ´Â ¸í·É Çϳª¸¸ ¿Ã ¼ö ÀÖÀ¸¸ç ±×·¡¼­ BEGIN, END Á¶Â÷ ¾µ ÇÊ¿ä ¾ø´Ù. ÇÔ¼ö°¡ ¸®ÅÏÇÏ´Â °á°ú¼ÂÀº ÀÏÁ¾ÀÇ Àӽà Å×À̺íÀÌ´Ù. ºä¿Í ºñ½ÁÇÏÁö¸¸ ºä´Â Á¤ÀÇÇÒ ¶§ °á°ú¼ÂÀÌ ¹Ì¸® °áÁ¤µÇ´Âµ¥ ºñÇØ ÇÔ¼ö´Â Àμö¿¡ µû¶ó °á°ú¼ÂÀÌ ´Þ¶óÁø´Ù´Â Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù.

´ÙÀ½ Äõ¸®´Â °­¿øµµÀÇ µµ½Ã ¸ñ·ÏÀ» Ãâ·ÂÇÑ´Ù. Å×À̺í ÇÔ¼ö´Â ½ºÅ°¸¶¸¦ ºÙÀÌÁö ¾Ê¾Æµµ »ó°ü¾øÁö¸¸ °¡±ÞÀû ÀÏ°üµÇ°Ô ºÙÀÌ´Â °ÍÀÌ ÁÁ´Ù. ÇÔ¼ö´Â SELECT ¹®À¸·Î Á¶»çÇÑ °á°ú¼ÂÀ» ¸®ÅÏÇϸç È£Ãâ¿øÀº ÇÔ¼ö¸¦ ¸¶Ä¡ Å×À̺íó·³ »ç¿ëÇÑ´Ù.

 

SELECT * FROM dbo.FN_GetCity('°­¿ø');

ÇÔ¼ö°¡ ¸®ÅÏÇÑ Å×ÀÌºí¿¡ ´ëÇØ ÀϺΠÇʵ常 ¼±ÅÃÀûÀ¸·Î Ãâ·ÂÇϰųª Á¶°ÇÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ Äõ¸®´Â °­¿øµµ µµ½ÃÁß Àα¸°¡ 10¸¸À» ³Ñ´Â µµ½Ã¸¸ Á¶»çÇϸç ÃáõÀ» Ãâ·ÂÇÑ´Ù.

 

SELECT * FROM dbo.FN_GetCity('°­¿ø') WHERE popu > 10;

 

Á¶Àι®À» ÇÔ¼ö·Î Á¤ÀÇÇØ µÎ¸é ÇÔ¼ö ³»ºÎÀÇ Á¶Àι®ÀÌ ¾Æ¹«¸® º¹ÀâÇصµ ¸®ÅÏ °á°ú´Â ÇϳªÀÇ Å×À̺íÀÌ¸ç ¸¶Ä¡ ¿ø·¡ºÎÅÍ ÀÖ´ø Å×À̺íó·³ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÀζóÀÎ Å×À̺í ÇÔ¼ö´Â SELECT ¹® Çϳª·Î ±¸¼ºµÇ¸ç Äõ¸® °á°ú¸¦ ¸®ÅÏÇÒ »Ó º¯¼ö³ª Á¦¾î¹® °°Àº º¹ÀâÇÑ ÄÚµå´Â ¾µ ¼ö ¾ø´Ù. ÀÌ¿¡ ºñÇØ ´ÙÁß¹® Å×À̺í ÇÔ¼ö´Â Äڵ带 »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ¾Æ¿¹ »õ·Î¿î Å×À̺íÀ» ¸¸µé¾î ¸®ÅÏÇÑ´Ù.

¸®ÅÏÇÒ Å×À̺íÀ» RETURNS Àý¿¡¼­ ¼±¾ðÇÑ´Ù. ¹®¹ýÀº CREATE TABLE°ú ºñ½ÁÇÏ¸ç °ýÈ£ ¾È¿¡ ÇÊµå ¸ñ·ÏÀ» ³ª¿­ÇÑ´Ù. º»Ã¼¿¡¼­´Â ÀÌ Å×ÀÌºí¿¡ ·¹Äڵ带 ä¿ö ¸®ÅÏÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â Àμö·Î Àü´Þ¹ÞÀº Áö¿ªÀÇ µµ½Ã¸í°ú Àα¸¼ö¸¸À¸·Î Å×À̺íÀ» ¸¸µé¾î ¸®ÅÏÇÑ´Ù.

 

CREATE FUNCTION FN_GetCityTable(@region CHAR(10))

RETURNS @result TABLE

     (name VARCHAR(10),popu INT)

AS

BEGIN

     INSERT INTO @result SELECT name, popu FROM tCity WHERE region = @region;

     RETURN;

END

 

@result Å×ÀÌºí º¯¼ö¸¦ À̸§°ú Àα¸¸¸ °¡Áö´Â ÇüÅ·ΠÁ¤ÀÇÇÏ°í º»Ã¼¿¡¼­ tCityÀÇ ·¹Äڵ带 Àоî ÀÌ Å×À̺íÀ» ä¿ü´Ù. ±×¸®°í ¸¸µé¾îÁø Å×À̺í ÀÚü¸¦ ¸®ÅÏÇÑ´Ù. ´ÙÀ½ Äõ¸®¹®Àº °æ±âµµ Áö¿ªÀÇ µµ½Ã ¸ñ·ÏÀ» Ãâ·ÂÇ쵂 ¿øº»°ú ´Þ¸® À̸§°ú Àα¸¼ö¸¸ ³ªÅ¸³­´Ù.

 

SELECT * FROM dbo.FN_GetCityTable('°æ±â');

 

ÇÔ¼ö¿¡ ÀÇÇØ »õ·Î¿î Å×À̺íÀÌ ¸¸µé¾îÁø´Ù. ºä¿Í À¯»çÇÏÁö¸¸ DB¿¡ ¿µ±¸ÀûÀ¸·Î ÀúÀåµÇÁö ¾ÊÀ¸¸ç ÇÔ¼ö°¡ ³¡³ª¸é »èÁ¦µÇ´Â Àӽà Å×À̺íÀÌ´Ù. ÇÔ¼ö È£Ãâ½Ã¸¶´Ù »ý¼ºÇß´Ù°¡ »ç¶óÁ® ¼º´É»ó ºÒ¸®ÇÏ´Ù.