SQL Server´æ´¢¹ý³ÌÊÇÒ»¸ö±»ÃüÃûµÄ´æ´¢ÔÚ·þÎñÆ÷ÉϵÄTransacation-SqlÓï¾ä¼¯ºÏ,ÊÇ·â×°ÖØ¸´ÐÔ¹¤×÷µÄÒ»ÖÖ·½·¨,ËüÖ§³ÖÓû§ÉùÃ÷µÄ±äÁ¿¡¢Ìõ¼þÖ´ÐÐºÍÆäËûÇ¿´óµÄ±à³Ì¹¦ÄÜ¡£
SQL ServerÊý¾Ý¿â´æ´¢¹ý³ÌÏà¶ÔÓÚÆäËûµÄÊý¾Ý¿â·ÃÎÊ·½·¨ÓÐÒÔϵÄÓŵ㣺
(1)ÖØ¸´Ê¹Óᣴ洢¹ý³Ì¿ÉÒÔÖØ¸´Ê¹Ó㬴Ӷø¿ÉÒÔ¼õÉÙÊý¾Ý¿â¿ª·¢ÈËÔ±µÄ¹¤×÷Á¿¡£
(2)Ìá¸ßÐÔÄÜ¡£´æ´¢¹ý³ÌÔÚ´´½¨µÄʱºò¾Í½øÐÐÁ˱àÒ룬½«À´Ê¹ÓõÄʱºò²»ÓÃÔÙÖØÐ±àÒë¡£Ò»°ãµÄSQLÓï¾äÿִÐÐÒ»´Î¾ÍÐèÒª±àÒëÒ»´Î£¬ËùÒÔʹÓô洢¹ý³ÌÌá¸ßÁËЧÂÊ¡£
(3)¼õÉÙÍøÂçÁ÷Á¿¡£´æ´¢¹ý³ÌλÓÚ·þÎñÆ÷ÉÏ£¬µ÷ÓõÄʱºòÖ»ÐèÒª´«µÝ´æ´¢¹ý³ÌµÄÃû³ÆÒÔ¼°²ÎÊý¾Í¿ÉÒÔÁË£¬Òò´Ë½µµÍÁËÍøÂç´«ÊäµÄÊý¾ÝÁ¿¡£
(4)°²È«ÐÔ¡£²ÎÊý»¯µÄ´æ´¢¹ý³Ì¿ÉÒÔ·ÀÖ¹SQL×¢ÈëʽµÄ¹¥»÷£¬¶øÇÒ¿ÉÒÔ½«Grant¡¢DenyÒÔ¼°RevokeȨÏÞÓ¦ÓÃÓÚ´æ´¢¹ý³Ì¡£
SQL Server´æ´¢¹ý³ÌÒ»¹²·ÖΪÁËÈýÀࣺÓû§¶¨ÒåµÄ´æ´¢¹ý³Ì¡¢À©Õ¹´æ´¢¹ý³ÌÒÔ¼°ÏµÍ³´æ´¢¹ý³Ì¡£
ÆäÖУ¬Óû§¶¨ÒåµÄ´æ´¢¹ý³ÌÓÖ·ÖΪTransaction-SQLºÍCLRÁ½ÖÖÀàÐÍ¡£
1.Transaction-SQL ´æ´¢¹ý³ÌÊÇÖ¸±£´æµÄTransaction-SQLÓï¾ä¼¯ºÏ£¬¿ÉÒÔ½ÓÊܺͷµ»ØÓû§ÌṩµÄ²ÎÊý¡£
2.CLR´æ´¢¹ý³ÌÊÇÖ¸¶Ô.Net Framework¹«¹²ÓïÑÔÔËÐÐʱ(CLR)·½·¨µÄÒýÓ㬿ÉÒÔ½ÓÊܺͷµ»ØÓû§ÌṩµÄ²ÎÊý¡£ËûÃÇÔÚ.Net Framework³ÌÐò¼¯ÖÐÊÇ×÷ΪÀàµÄ¹«¹²¾²Ì¬·½·¨ÊµÏֵġ£(±¾ÎľͲ»×÷½éÉÜÁË)
´´½¨SQL Server´æ´¢¹ý³ÌµÄÓï¾äÈçÏ£º
ÒÔÏÂΪÒýÓõÄÄÚÈÝ£º
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] [ { @parameter [ type_schema_name. ] data_type } [ VARYING ] [ = default ] [ [ OUT [ PUT ] ] [ ,n ] [ WITH < procedure_option> [ ,n ] [ FOR REPLICATION ] AS { < sql_statement> [;][ n ] | < method_specifier> } [;] < procedure_option> ::= [ ENCRYPTION ] [ RECOMPILE ] [ EXECUTE_AS_Clause ] < sql_statement> ::= { [ BEGIN ] statements [ END ] } < method_specifier> ::= EXTERNAL NAME assembly_name.class_name.method_name [schema_name]: ´ú±íµÄÊÇ´æ´¢¹ý³ÌËùÊôµÄ¼Ü¹¹µÄÃû³Æ
ÀýÈ磺
Create Schema yangyang8848 Go Create Proc yangyang8848.AllGoods As Select * From Master_Goods Go Ö´ÐУºExec AllGoods ·¢Éú´íÎó¡£
Ö´ÐУºExec yangyang8848.AllGoods ÕýÈ·Ö´ÐС£
[£»Number]: ÓÃÓÚ¶ÔͬÃû¹ý³Ì½øÐзÖ×éµÄ¿ÉÑ¡ÕûÊý¡£Ê¹ÓÃÒ»¸ö DROP PROCEDURE Óï¾ä¿É½«ÕâЩ·Ö×é¹ý³ÌÒ»Æðɾ³ý¡£
ÀýÈ磺
Create Proc S1 ;1 AS Select * From Master_Goods Go Create Proc S1 ;2 As Select * From Master_Location Go ´´½¨Íê±ÏÁËÁ½¸ö´æ´¢¹ý³Ì¡£ËüÃÇÔÚͬһ¸ö×éS1ÀÈç¹ûÖ´ÐÐExec S1 Ôò´æ´¢¹ý³ÌĬÈÏÖ´ÐÐ Exec S1 ;1 ¡£Èç¹ûÎÒÃÇÏëµÃµ½ËùÓоݵãÐÅÏ¢ÔòÐèÒªÖ´ÐÐExec S1 ;2¡£µ±ÎÒÃÇҪɾ³ý´æ´¢¹ý³ÌµÄʱºò£¬Ö»ÄÜÖ´ÐÐDrop Exec S1 Ôò¸Ã×éÄÚËùÓеĴ洢¹ý³Ì±»É¾³ý¡£
[@ parameter]: ´æ´¢¹ý³ÌÖеIJÎÊý£¬³ý·Ç½«²ÎÊý¶¨ÒåµÄʱºòÓÐĬÈÏÖµ»òÕß½«²ÎÊýÉèÖÃΪµÈÓÚÁíÒ»¸ö²ÎÊý£¬·ñÔòÓû§±ØÐëÔÚµ÷Óô洢¹ý³ÌµÄʱºòΪ²ÎÊý¸³Öµ¡£
SQL Server´æ´¢¹ý³Ì×î¶àÓÐ2100¸ö²ÎÊý¡£
ÀýÈ磺
Create Proc yangyang8848.OneGoods @GoodsCode varchar(10) As Select * From Master_Goods Where GoodsCode = @GoodsCode Go µ÷ÓõĴúÂ룺
Declare @Code varchar(10) Set @Code = '0004' Exec yangyang8848.OneGoods @Code ÔÚ²ÎÊýµÄºó±ß¼ÓÈëOutput ±íÃ÷¸Ã²ÎÊýΪÊä³ö²ÎÊý¡£
Create Proc yangyang8848.OneGoods @GoodsCode2 varchar(10) output,@GoodsCode varchar(10) = '0011' As Select * From Master_Goods Where GoodsCode = @GoodsCode Set @GoodsCode2 = '0005' Go µ÷Ó÷½·¨£º
Declare @VV2 varchar(10) Exec yangyang8848.OneGoods @Code out ×¢Ò⣺Èç¹û´æ´¢¹ý³ÌµÄÁ½¸ö²ÎÊýÒ»¸öÓÐĬÈÏÖµÒ»¸öûÓУ¬ÄÇôÎÒÃÇÒª°ÑÓÐĬÈÏÖµµÃ·ÅÔÚºó±ß£¬²»È»»á³öÎÊÌâŶ~~
ϸÐĵÄÅóÓÑ£¬¿ÉÄÜ¿´µ½ÉϱߵÄÓï¾äÓÐһЩ²»Í¬£¬±ÈÈ磬´æ´¢¹ý³ÌÓõÄÊÇoutput£¬¶øµ÷ÓÃÓï¾äÓõÄÊÇout¡£ÎÒÒª¸æËßÄú£¬Á½ÕßÊÇÒ»ÑùµÄ¡£
[RECOMPILE]£ºÖ¸Ê¾Êý¾Ý¿âÒýÇæ ²»»º´æ¸Ã¹ý³ÌµÄ¼Æ»®£¬¸Ã¹ý³ÌÔÚÔËÐÐʱ±àÒë¡£Èç¹ûÖ¸¶¨ÁË FOR REPLICATION£¬Ôò²»ÄÜʹÓôËÑ¡Ïî¡£¶ÔÓÚ CLR ´æ´¢¹ý³Ì£¬²»ÄÜÖ¸¶¨ RECOMPILE¡£
Õâ¸ö˵һ¸ö·Ç³£ºÃÓõĺ¯Êý OBJECT_ID £º·µ»Ø¼Ü¹¹·¶Î§ÄÚ¶ÔÏóµÄÊý¾Ý¿â¶ÔÏó±êʶºÅ¡£
ÀýÈ磺ÎÒÃÇ´´½¨´æ´¢¹ý³Ìʱ£¬¿ÉÒÔÈçÏÂд´úÂë
If Object_ID('yangyang8848.OneGoods') Is Not Null Drop Proc yangyang8848.OneGoods Go Create Proc yangyang8848.OneGoods @GoodsCode2 varchar(10) out,@GoodsCode varchar(10) = '0011' As Select * From Master_Goods Where GoodsCode = @GoodsCode Set @GoodsCode2 = '0005' Go Õë¶ÔÓÚÉϱߵÄÕâ¸ö´æ´¢¹ý³Ì£¬ÎÒÃǵ÷ÓÃÒÔÏÂSQL²éѯ
Select definition From sys.sql_modules Where object_id = Object_ID('yangyang8848.OneGoods'); ÎÒÃÇÊÇ¿ÉÒԲ鵽½á¹ûµÄ¡£
¿ÉÊÇÈç¹ûÎÒÃǶԸô洢¹ý³Ì¼ÓÈë[ ENCRYPTION ] ÄÇôÄ㽫ÎÞ·¨¿´µ½Èκνá¹û
If Object_ID('yangyang8848.OneGoods') Is Not Null Drop Proc yangyang8848.OneGoods Go Create Proc yangyang8848.OneGoods @GoodsCode2 varchar(10) out,@GoodsCode varchar(10) = '0011' With Encryption As Select * From Master_Goods Where GoodsCode = @GoodsCode Set @GoodsCode2 = '0005' Go È»ºóÎÒÃDzéѯ sys.sql_modules Ŀ¼ÊÓͼ£¬½«·µ»Ø¸øÄãNull¡£
È»ºóÎÒÃÇÖ´ÐÐÒÔÏÂSQL: Exec sp_helptext 'yangyang8848.OneGoods'
Ä㽫µÃµ½ÒÔϽá¹û£ºThe text for object 'yangyang8848.OneGoods' is encrypted.
˵µ½ÕâÀïÄãÓ¦¸ÃÃ÷°×ÁË£¬²ÎÊý[ ENCRYPTION ]£ºÊÇÒ»ÖÖ¼ÓÃܵŦÄÜ£¬ ½« CREATE PROCEDURE Óï¾äµÄÔʼÎı¾×ª»»ÎªÄ£ºý¸ñʽ¡£Ä£ºý´úÂëµÄÊä³öÔÚ SQL Server 2005 µÄÈκÎĿ¼ÊÓͼÖж¼²»ÄÜÖ±½ÓÏÔʾ¡£¶Ôϵͳ±í»òÊý¾Ý¿âÎļþûÓзÃÎÊȨÏÞµÄÓû§²»ÄܼìË÷Ä£ºýÎı¾¡£µ«ÊÇ£¬¿Éͨ¹ý DAC ¶Ë¿Ú·ÃÎÊϵͳ±íµÄÌØÈ¨Óû§»òÖ±½Ó·ÃÎÊÊý¾Ý¿âÎļþµÄÌØÈ¨Óû§¿ÉʹÓôËÎı¾¡£´ËÍ⣬Äܹ»Ïò·þÎñÆ÷½ø³Ì¸½¼Óµ÷ÊÔÆ÷µÄÓû§¿ÉÔÚÔËÐÐʱ´ÓÄÚ´æÖмìË÷ÒѽâÃܵĹý³Ì¡£
ǰÁ½ÌìдÁËһƪ¹ØÓÚÓαêµÄ½éÉÜÎÄÕ £¬Ï±ßдһ¸öÀý×Ó£¬½«ÓαêÓë´æ´¢¹ý³ÌÒ»ÆðʹÓÃÉÏ£º
If Object_ID('dbo.GetMasterGoods') Is Not Null Drop Proc dbo.GetMasterGoods Go Create Proc GetMasterGoods @MyCursor Cursor Varying Output With Encryption As Set @MyCursor = Cursor For Select GoodsCode,GoodsName From Master_Goods Open @MyCursor Go ϱ߽¨Á¢ÁíÍâÒ»¸ö´æ´¢¹ý³Ì£¬ÓÃÓÚ±éÀúÓαêÊä³ö½á¹û
Create Proc GetAllGoodsIDAndName As Declare @GoodsCode varchar(18) Declare @GoodsName nvarchar(20) Declare @MasterGoodsCursor Cursor Exec GetMasterGoods @MasterGoodsCursor out Fetch Next From @MasterGoodsCursor InTo @GoodsCode,@GoodsName While(@@Fetch_Status = 0) Begin Begin Print @GoodsCode + ':' + @GoodsName End Fetch Next From @MasterGoodsCursor InTo @GoodsCode,@GoodsName End Close @MasterGoodsCursor Deallocate @MasterGoodsCursor Go ×îºóÖ´ÐÐExec GetAllGoodsIDAndName½á¹ûΪÒÔÏÂÄÚÈÝ
0003:Æ·0003 0004:Æ·0004 0005:123123 0006:Æ·0006 0007:Æ·0007 0008:Æ·0008 0009:Æ·0009 0010:Æ·0010 0011:Æ·0011 0012:Æ·0012 0013:Æ·0013 0014:Æ·0014