天天看點

如何編寫資料庫存儲過程?

在程式設計的時候,出于安全、效率和擴充性方面的考慮,我們會把很多資料操作都封裝為存儲過程。

存儲過程是已儲存的 Transact-SQL 語句集合,或對 Microsoft .NET Framework 公共語言運作時 (CLR) 方法的引用,可接收并傳回使用者提供的參數。可以建立過程供永久使用,或在一個會話(局部臨時過程)中臨時使用,或在所有會話(全局臨時過程)中臨時使用。

啟動 SQL Server 的一個執行個體時,也可以建立并自動運作存儲過程。

存儲過程現在可以利用T-SQL和托管代碼兩種方式編寫。下面我們主要看看如何使用T-SQL語句快速地編寫存儲過程

我們來看一下基本文法

CREATE { PROC | PROCEDURE } [schema_name         .                ] procedure_name [          ;                 number ]     [ {          @                parameter [ type_schema_name         .                 ] data_type }         [ VARYING ] [          =                 default ] [ OUT | OUTPUT ]     ] [          ,                ...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      
但是,是不是說我們真的要一個一個去編寫呢?那樣的确很繁瑣,尤其對于業務邏輯不是很複雜的情況下。      
第一個方法:善用SQL SERVER自帶的工具。以SQL Server 2005為例,我們可以通過SQL SERVER Management Studio的上下文菜單來生成代碼      

INSERT INTO [OrderDB].[dbo].[OrderDetails]

           ([OrderID]

           ,[LineNumber]

           ,[ProductID]

           ,[UnitPrice]

           ,[Quantity])

     VALUES

           (<OrderID, int,>

           ,<LineNumber, tinyint,>

           ,<ProductID, int,>

           ,<UnitPrice, decimal(18,2),>

           ,<Quantity, int,>)

第二個方法:善用第三方工具。我這裡推薦一個産品是CodeSmith,它有一個模闆,可以在幾秒鐘之内為一個資料庫所有表生成增删改查的存儲過程