×¢²á | µÇ¼ Íü¼ÇÃÜÂ룿 51ctoÊ×Ò³ | ²©¿Í | ÂÛ̳ | ÕÐÆ¸
ÈȵãÎÄÕ ÀûÓÃÊÖ»úºÍµç³ØÊµÏÖ·´µØÐÄ..
¡¡°ïÖú

SQL Server 2005 - ʵ×÷CLR´æ´¢¹ý³Ì


2007-01-12 09:48:35
°æÈ¨ÉùÃ÷£ºÔ­´´×÷Æ·£¬ÈçÐè×ªÔØ£¬ÇëÓë×÷ÕßÁªÏµ¡£·ñÔò½«×·¾¿·¨ÂÉÔðÈΡ£
¡¸´æ´¢¹ý³Ì¡¹£¨Stored Procedures£©ÊÇSQL Server 2005³ÌÐòÉè¼ÆÖÐ×îÖØÒªµÄÒ»»·£¬Äú½«»á·¢ÏÖ£¬Ó¦ÓÃϵͳÖеÄÐí¶à×÷Òµ¶¼»á½»ÓÉ´æ´¢¹ý³ÌÀ´Íê³É¡£ÔÚÒÔϵIJÙ×÷²½ÖèÖУ¬ÎÒÃǽ«´øÁì´ó¼ÒÀûÓÃVisual Studio 2005ÕûºÏʽ¿ª·¢»·¾³£¬Êµ¼Ê½¨Á¢Ò»¸öCLR´æ´¢¹ý³Ì£¨²ÉÓÃVisual C#£©£¬²¢Ê¾·¶ÈçºÎʹÓÃËü£º
 
1.           Èçͼ±í1Ëùʾ£¬Ñ¡È¡Microsoft Visual Studio 2005²Ëµ¥Ö¸ÁîÀ´¿ªÆôVisual Studio 2005µÄÕûºÏʽ¿ª·¢»·¾³¡£
                                                     ͼ±í1
2.           ´Ó¡¸ÏîÄ¿¡¹²Ëµ¥ÖÐѡȡ¡¸ÐÂÔö£¯ÏîÄ¿¡¹Ö¸Áî¡£

3.           Èçͼ±í2Ëùʾ£¬Ñ¡È¡¡¸Àà±ð¿â¡¹Ä£°å£¬È»ºóÒÀÐòÖ¸¶¨ÏîÄ¿Ãû³Æ£¨SayHello£©¡¢´æ·ÅλÖá¢ÒÔ¼°·½°¸Ãû³Æ£¨SayHello£©Ö®ºó£¬°´Ò»Ï¡¸È·¶¨¡¹°´Å¥¡£
                                           ͼ±í2
 
4.           ÓÚVisual Studio 2005ÕûºÏʽ¿ª·¢»·¾³µÄ¡¸·½°¸×ܹܡ¹ÖУ¬Ê¹ÓÃÊó±êÓÒ¼ü°´Ò»ÏÂÔ¤É轨Á¢µÄClass1.cs²¢´Ó¿ì½Ý²Ëµ¥ÖÐѡȡ¡¸É¾³ý¡¹Ö¸ÁîÒԱ㽫Ëüɾ³ý¡£

5.           ´Ó¡¸ÏîÄ¿¡¹²Ëµ¥ÖÐѡȡ¡¸¼ÓÈëÐÂÏîÄ¿¡¹Ö¸Áî¡£

6.           Èçͼ±í3Ëùʾ£¬ÓÚ¡¸¼ÓÈëÐÂÏîÄ¿¡¹¶Ô»°¿òÖУ¬Ñ¡È¡¡¸Àà±ð¡¹Ä£°å£¬È»ºóÒÔSayHelloClass.cs×÷ΪÀà±ðµµµÄÎļþÃû³Æ£¬È»ºó°´Ò»Ï¡¸¼ÓÈ롹°´Å¥¡£
                                      ͼ±í3
 
7.           ÓÚ³ÌÐò´úÂë±à¼­Æ÷ÖУ¬½«SayHelloClassÀà±ðµÄ³ÌÐò´úÂë¸ÄдÈçÏ£º

using Microsoft.SqlServer.Server;

namespace SayHello
{
 public class SayHelloClass
 {
  [Microsoft.SqlServer.Server.SqlProcedure()]
  public static void SayHello(ref string greeting)
  {
   SqlMetaData columnInfo = new SqlMetaData("Îʺò", SqlDbType.NVarChar, 12);
  
   SqlDataRecord greetingRecord = new SqlDataRecord(new SqlMetaData[] { columnInfo });
  
   greetingRecord.SetString(0, "´ó¼ÒºÃ£¬ÎÒÊÇÕÂÁ¢Ãñ£¡");
  
   // ºô½Ð Pipe ¶ÔÏóµÄ Send ·½·¨½«µ¥Ò»Êý¾ÝÁнá¹û¼¯£¨Ò²¾ÍÊÇ SqlDataRecord ¶ÔÏó£©
   // Ö±½Ó´«Ë͸ø¿Í»§¶Ë¡£
   SqlContext.Pipe.Send(greetingRecord);
  
   // ½«ÎÄ×Ö·û´®Ö¸ÅɸøÊä³ö²ÎÊý¡£
   greeting = "ÏÖÔÚʱ¼äÊÇ " + DateTime.Now.ToString() + " --- ÕÂÁ¢ÃñÑо¿ÊÒÏòÄúÎʺã¡";
  }
 }
}

ÉÏÊö³ÌÐò´úÂëÖеÄSayHello³ÌÐòÊÇÒ»¸ö¹«Óþ²Ì¬·½·¨£¬¶øËüÒ²¾ÍÊÇCLR´æ´¢¹ý³ÌËùʵ¼Êºô½ÐµÄ¶ÔÏó¡£

8.           °´Ò»Ï¹¤¾ßÁÐÖеġ¸´¢´æ¡¹°´Å¥¡£

9.           Èçͼ±í4Ëùʾ£¬Ê¹ÓÃÊó±êÁ¬°´Á½Ï¡¸·½°¸×ܹܡ¹ÖеÄProperties½Úµã£¬Ò»¿ªÊ¼»áÏÔʾ³ö¡¸Ó¦ÓóÌÐò¡¹Ë÷Òý¾í±êÒ³Ãæ£¬Äú¿ÉÒÔÈ¥É趨×é¼þÃû³ÆÓë¸úÃüÃû¿Õ¼ä¡£²»¹ýÒÔ±¾Êµ×÷ÑÝÁ·¶øÑÔ£¬Çë²ÉÓÃĬÈÏÖµ£¬²»Òª¸ü¸Ä¡£
ͼ±í4
 
10.       °´Ò»ÏÂ×ó²àµÄ¡¸±àÒ롹Ë÷Òý¾í±êÀ´Çл»ÖÁÆäÒ³Ãæ£¬²¢ÇÒ½«¡¸½¨ÖÃÊä³ö·¾¶¡¹É趨³É bin\£¨Èçͼ±í5Ëùʾ£©£¬È»ºó°´Ò»Ï¹¤¾ßÁÐÖеġ¸´¢´æ¡¹°´Å¥¡£
ͼ±í5
 
11.       ´Ó¡¸½¨ÖṲ˵¥ÖÐѡȡ¡¸½¨ÖÃSayHello¡¹Ö¸Áî¡£

12.       ºÃµÄ£¬ÎÒÃÇÏÖÔÚÒѾ­Íê³É×é¼þµÄ½¨ÖÃ×÷Òµ£¬ÏÖÔÚ±ØÐë»Øµ½SQL Server Management StudioÖУ¬ÒÔ±ãµÇ¼×é¼þ²¢½¨Á¢Ö¸Ïò¸Ã×é¼þµÄ´æ´¢¹ý³Ì¡£

13.       ÇëÄúÓÚSQL Server Management StudioÖÐÖ´ÐÐÒÔϵijÌÐò´úÂ룬ÒÔ±ãʹÓÃCREATE ASSEMBLY³ÂÊöʽÀ´µÇ¼×é¼þSayHello.dll£¬È»ºóʹÓÃCREATE PROCEDURE³ÂÊöʽ½¨Á¢Ò»¸ö»á²Î¿¼ËùµÇ¼֮×é¼þSayHello.dllµÄ´æ´¢¹ý³Ì£º

USE ±±·çóÒ×;
GO

IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'SayHello')
DROP PROCEDURE SayHello;
GO

IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'SayHello')
DROP ASSEMBLY SayHello;
GO

-- µÇ¼×é¼þ SayHello.dll£¨ÇëÎñ±ØÈ·ÈÏ×é¼þËùÔÚ·¾¶ÕýÈ·£©
CREATE ASSEMBLY SayHello
FROM 'C:\SQL2005Demo\CH13\SayHello\SayHello\bin\SayHello.dll'
WITH permission_set = Safe;    £ü
GO                           ¦é©¤©¤£¾×é¼þµÄλÖ÷¾¶

-- ½¨Á¢Ò»¸ö»á²Î¿¼ËùµÇ¼֮×é¼þ SayHello.dll µÄ´æ´¢¹ý³Ì
CREATE PROCEDURE dbo.SayHello
(
    @Greeting nvarchar(80) OUTPUT
)
AS EXTERNAL NAME SayHello.[SayHello.SayHelloClass].SayHello;
GO                                     ¡ý
                                 [ÃüÃû¿Õ¼ä.Àà±ðÃû³Æ]


14.       ÇëÄú¼ÌÐøÓÚSQL Server Management StudioÖÐÖ´ÐÐÒÔϵijÌÐò´úÂ룬ÒԱ㳢ÊÔÖ´ÐÐÎÒÃÇËù½¨Á¢µÄCLR´æ´¢¹ý³Ì£¨Ö´Ðнá¹ûÈçͼ±í6Ëùʾ£©£º

USE ±±·çóÒ×;
GO

EXEC sp_configure 'clr enabled', '1';
GO
RECONFIGURE;
GO

DECLARE @return_value int, @Greeting nvarchar(80);

-- Ö´ÐÐCLR´æ´¢¹ý³Ì²¢È¡µÃ´«»ØÖµÓëÊä³ö±äÁ¿µÄÖµ
EXECUTE @return_value = dbo.SayHello
        @Greeting = @Greeting OUTPUT;

-- ¼ìÊÓ´«»ØÖµÓëÊä³ö±äÊýµÄÖµ
SELECT @return_value AS ´«»ØÖµ,
           @Greeting AS "Êä³ö²ÎÊý @Greeting Ö®Öµ";
ͼ±í6
 
ÕÂÁ¢ÃñÑо¿ÊÒ׫дµÄÊý¾Ý¿â×î¼ÑÊé¼® £­ ¡¸SQL Server 2005Êý¾Ý¿â¿ª·¢ÊµÕ½¡¹ÓÐÍêÕûµÄÕ½ÚÄÚÈÝÐðÊöCLR´æ´¢¹ý³ÌµÄ׫дÓëʹÓ÷½·¨£¬Çë×ÔÐвο¼Ö®¡£

±¾Îijö×Ô ¡°ÕÂÁ¢Ãñ¡± ²©¿Í£¬×ªÔØÇëÓë×÷ÕßÁªÏµ£¡





    ÎÄÕÂÆÀÂÛ
 
 

·¢±íÆÀÂÛ

êÇ   ³Æ£º
ÑéÖ¤Â룺 ¡¡µã»÷ͼƬ¿ÉË¢ÐÂÑéÖ¤Âë¡¡¡¡²©¿Í¹ý2¼¶£¬ÎÞÐèÌîдÑéÖ¤Âë
ÄÚ   ÈÝ£º