官方文檔
存儲過程(數據庫引擎) - SQL Server | Microsoft Learn
Transact-SQL 參考(數據庫引擎) - SQL Server | Microsoft Learn
定義
存儲過程可以用編程語言的方法來類比,有輸入輸出。區別是其使用SQL表達業務過程。
舉個例子(代碼源自官方文檔)
這里 use 指定數據庫名,go 是SYBASE和SQL Server中用來表示事物結束,提交并確認結果,相當于ORACLE的Commit。關鍵字 procedure 后邊則是對應的過程的名稱及參數,as 后是具體內容
USE AdventureWorks2022;
GO
CREATE PROCEDURE HumanResources.uspGetEmployeesTest2 @LastName nvarchar(50), @FirstName nvarchar(50)
AS SET NOCOUNT ON; SELECT FirstName, LastName, Department FROM HumanResources.vEmployeeDepartmentHistory WHERE FirstName = @FirstName AND LastName = @LastName AND EndDate IS NULL;
GO
執行
下面代碼(源自官方文檔)提供了三種執行存儲過程的方式
EXECUTE HumanResources.uspGetEmployeesTest2 N'Ackerman', N'Pilar';
-- Or
EXEC HumanResources.uspGetEmployeesTest2 @LastName = N'Ackerman', @FirstName = N'Pilar';
GO
-- Or
EXECUTE HumanResources.uspGetEmployeesTest2 @FirstName = N'Pilar', @LastName = N'Ackerman';
GO
更新
采用的是先刪除再創建的方法,看Sql中高亮的關鍵字
IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL DROP PROCEDURE Purchasing.uspVendorAllInfo;
GO
CREATE PROCEDURE Purchasing.uspVendorAllInfo
WITH EXECUTE AS CALLER
AS SET NOCOUNT ON; SELECT v.Name AS Vendor, p.Name AS 'Product name', v.CreditRating AS 'Rating', v.ActiveFlag AS Availability FROM Purchasing.Vendor v INNER JOIN Purchasing.ProductVendor pv ON v.BusinessEntityID = pv.BusinessEntityID INNER JOIN Production.Product p ON pv.ProductID = p.ProductID ORDER BY v.Name ASC;
GO
官方文檔有很詳細的說明哦。