今天收集了最爲常見的存儲過程代碼,拿出來和大家分享一下,希望大家能夠喜歡!最長用的存儲過程的寫法,有輸出參數
2 (
3 @CustomerID uniqueidentifier,
4 @Status nvarchar(50),
5 @ShippingName nvarchar(200),
6 @ShippingState nvarchar(200),
7 @ShippingCity nvarchar(200),
8 @ShippingAddress nvarchar(50),
9 @ShippingMode nvarchar(50),
10 @PayMode nvarchar(50),
11 @PostCode nvarchar(50),
12 @Phone nvarchar(50),
13 @MobilePhone nvarchar(50),
14
15 @OrderID int OUTPUT
16 )
17 AS
18 INSERT INTO Orders
19 (
20 DateCreated,
21 CustomerID,
22 Status,
23 ShippingName,
24 ShippingState,
25 ShippingCity,
26 ShippingAddress,
27 ShippingMode,
28 PayMode,
29 PostCode,
30 Phone,
31 MobilePhone
32 )
33 VALUES
34 (
35 GetDate(),
36 @CustomerID,
37 @Status,
38 @ShippingName,
39 @ShippingState,
40 @ShippingCity,
41 @ShippingAddress,
42 @ShippingMode,
43 @PayMode,
44 @PostCode,
45 @Phone,
46 @MobilePhone
47 )
48
49 SELECT @OrderID=MAX(OrderID) FROM Orders WHERE CustomerID=@CustomerID
50
51
52 RETURN
臨時表、表變量的用法
2 (
3 @CustmerID uniqueidentifier,
4 @SubTotal money OUTPUT,
5 @Count int OUTPUT
6 )
7 AS
8 DECLARE @proVisionalTable1 TABLE
9 (
10 OrderID int,
11 ShippingName nvarchar(50),
12 PayMode nvarchar(50),
13 Status nvarchar(50),
14 DateCreated datetime,
15 SubTotal money
16 );
17
18
19 WITH provisionalTable AS
20 (
21 SELECT SUM(SubTotal) AS SubTotal,OrderID AS OrderId FROM OrderDetail GROUP BY OrderID
22 )
23
24 INSERT INTO @provisionalTable1
25 SELECT
26 Orders.OrderID,
27 Orders.ShippingName,
28 Orders.PayMode,
29 Orders.Status,
30 Orders.DateCreated,
31 provisionalTable.SubTotal
32 FROM Orders LEFT JOIN provisionalTable ON (Orders.OrderID=provisionalTable.OrderId) WHERE CustomerID=@CustmerID
33
34 SELECT * FROM @provisionalTable1
35
36 SELECT @SubTotal=SUM(SubTotal) FROM @provisionalTable1
37
38 SELECT @Count=COUNT(*) FROM @provisionalTable1
39 RETURN
用臨時表分頁
2 (
3 @CurrentPage INT,
4 @MaxImumRows INT,
5 @DepartmentID INT,
6 @HowManyPage INT OUTPUT
7 )
8 AS
9 BEGIN
10 DECLARE @provisionalProduct TABLE
11 (
12 ProductID INT,
13 PublisherID INT,
14 [Name] nvarchar(50),
15 Image1FileName varchar(50),
16 PublisherName nvarchar(200),
17 CategoryID int,
18 ISBN nvarchar(200),
19 Price money,
20 AccountPrice money,
21 Account int,
22 SellQuantity int,
23 DepartmentID int,
24 sellRank int
25 )
26
27 INSERT INTO @provisionalProduct
28 SELECT product.ProductID,
29 product.PublisherID,
30 product.Name,
31 product.Image1FileName,
32 Publisher.PublisherName,
33 ProductCategory.CategoryID,
34 product.ISBN,
35 product.Price,
36 product.AccountPrice,
37 product.Account,
38 product.SellQuantity,
39 Category.DepartmentID,
40 ROW_NUMBER() OVER (ORDER BY SellQuantity)
41 FROM Product LEFT JOIN Publisher ON product.PublisherID=Publisher.PublisherID
42 LEFT JOIN ProductCategory ON product.ProductID=ProductCategory.ProductID
43 LEFT JOIN Category ON Category.CategoryID=ProductCategory.CategoryID WHERE (Category.DepartmentID = @DepartmentID)
44
45
46
47
48 SELECT ProductID,
49 [Name],
50 Image1FileName,
51 CategoryID,
52 PublisherName,
53 ISBN,
54 Price,
55 AccountPrice,
56 Account,
57 DepartmentID,
58 sellRank
59 FROM @provisionalProduct WHERE sellRank BETWEEN ((@CurrentPage-1)*@MaxImumRows+1) AND (@CurrentPage*@MaxImumRows)
60
61
62
63 SELECT @HowManyPage = COUNT(*) FROM @provisionalProduct;
64 END
65 RETURN
用表變量分頁:
2 (
3 @CurrentPage INT,
4 @MaxImumRows INT
5 )
6 AS
7 WITH provisionalProduct AS
8 (
9 SELECT product.PublisherID AS PublisherID,
10 product.ProductID AS ProductID,
11 product.Name AS [Name],
12 product.Image1FileName AS Image1FileName,
13 Publisher.PublisherName AS PublisherName,
14 product.ISBN AS ISBN,
15 product.Price AS Price,
16 product.AccountPrice AS AccountPrice,
17 product.Account AS Account,
18 product.SellQuantity AS SellQuantity,
19 ROW_NUMBER() OVER (ORDER BY SellQuantity) AS sellRank
20 FROM Product LEFT JOIN Publisher ON product.PublisherID=Publisher.PublisherID
21 )
22
23
24 SELECT [Name],
25 ProductID,
26 Image1FileName,
27 PublisherName,
28 ISBN,
29 Price,
30 AccountPrice,
31 Account,
32 sellRank
33 FROM provisionalProduct
34 WHERE sellRank BETWEEN ((@CurrentPage-1)*@MaxImumRows+1) AND (@CurrentPage*@MaxImumRows)
35 RETURN
向下面的這中情況只能用臨時表不能用表變量:
2 (
3 @CurrentPage INT,
4 @MaxImumRows INT,
5 @CategroyID INT,
6 @HowManyPage INT OUTPUT
7 )
8 AS
9 BEGIN
10 DECLARE @provisionalProduct TABLE
11 (
12 ProductID INT,
13 PublisherID INT,
14 [Name] nvarchar(50),
15 Image1FileName varchar(50),
16 PublisherName nvarchar(200),
17 CategoryID int,
18 ISBN nvarchar(200),
19 Price money,
20 AccountPrice money,
21 Account int,
22 SellQuantity int,
23 sellRank int
24 )
25 INSERT INTO @provisionalProduct
26 SELECT product.ProductID,
27 product.PublisherID,
28 product.Name,
29 product.Image1FileName,
30 Publisher.PublisherName,
31 ProductCategory.CategoryID,
32 product.ISBN,
33 product.Price,
34 product.AccountPrice,
35 product.Account,
36 product.SellQuantity,
37 ROW_NUMBER() OVER (ORDER BY SellQuantity)
38 FROM Product LEFT JOIN Publisher ON product.PublisherID=Publisher.PublisherID
39 LEFT JOIN ProductCategory ON product.ProductID=ProductCategory.ProductID WHERE (CategoryID = @CategroyID)
40
41
42
43 SELECT ProductID,
44 [Name],
45 Image1FileName,
46 CategoryID,
47 PublisherName,
48 ISBN,
49 Price,
50 AccountPrice,
51 Account,
52 sellRank
53 FROM @provisionalProduct WHERE sellRank BETWEEN ((@CurrentPage-1)*@MaxImumRows+1) AND (@CurrentPage*@MaxImumRows);
54
55
56 SELECT @HowManyPage = COUNT(*) FROM @provisionalProduct;
57 END
58 RETURN
59
簡單的判斷型更新:
2 (
3 @CartID CHAR(36),
4 @ProductID int
5 )
6 AS
7 IF EXISTS(SELECT ProductID FROM ShoppingCart WHERE CartID=@CartID AND ProductID=@ProductID )
8 UPDATE ShoppingCart SET Quantity=Quantity+1 WHERE CartID=@CartID AND ProductID=@ProductID
9
10 ELSE
11 INSERT INTO ShoppingCart VALUES(@CartID,@ProductID,1,GETDATE())
12 RETURN
簡單搜索用到得存儲過程:
{
搜索用的存儲過程:
2 (
3 @CurrentPage int,
4 @MaxImumRows int,
5 @HowManyPages int output,
6 @AllWorld1 varchar(50)=null,
7 @AllWorld2 varchar(50)=null,
8 @AllWorld3 varchar(50)=null,
9 @AllWorld4 varchar(50)=null,
10 @AllWorld5 varchar(50)=null
11 )
12 AS
13 BEGIN
14 DECLARE @provisionalProduct TABLE
15 (
16 Description varchar(5000),
17 ProductID INT,
18 PublisherID INT,
19 [Name] nvarchar(50),
20 Image1FileName varchar(50),
21 PublisherName nvarchar(200),
22 CategoryID int,
23 ISBN nvarchar(200),
24 Price money,
25 AccountPrice money,
26 Account int,
27 SellQuantity int,
28 DepartmentID int,
29 sellRank int,
30 Rank int,
31 RankOrder int
32
33 )
34 INSERT INTO @provisionalProduct
35 SELECT
36 *,
37 ROW_NUMBER() OVER (ORDER BY producttemp.Rank DESC) AS RankOrder FROM
38 (
39 SELECT Product.Description,
40 product.ProductID,
41 product.PublisherID,
42 product.Name,
43 product.Image1FileName,
44 Publisher.PublisherName,
45 ProductCategory.CategoryID,
46 product.ISBN,
47 product.Price,
48 product.AccountPrice,
49 product.Account,
50 product.SellQuantity,
51 Category.DepartmentID,
52 ROW_NUMBER() OVER (ORDER BY SellQuantity) AS sellRank,
53 (
54 3*dbo.wordCount(@AllWorld1,product.Name)+dbo.WordCount(@AllWorld1,Product.Description)+
55 3*dbo.WordCount(@AllWorld2,product.Name)+dbo.WordCount(@AllWorld2,Product.Description)+
56 3*dbo.WordCount(@AllWorld3,product.Name)+dbo.WordCount(@AllWorld3,Product.Description)+
57 3*dbo.WordCount(@AllWorld4,product.Name)+dbo.WordCount(@AllWorld4,Product.Description)+
58 3*dbo.WordCount(@AllWorld5,product.Name)+dbo.WordCount(@AllWorld5,Product.Description)
59 ) AS Rank
60 FROM Product LEFT JOIN Publisher ON product.PublisherID=Publisher.PublisherID
61 LEFT JOIN ProductCategory ON product.ProductID=ProductCategory.ProductID
62 LEFT JOIN Category ON Category.CategoryID=ProductCategory.CategoryID
63 ) AS producttemp
64
65
66
67
68
69
70
71
72 SELECT Description,
73 ProductID,
74 [Name],
75 Image1FileName,
76 CategoryID,
77 PublisherName,
78 ISBN,
79 Price,
80 AccountPrice,
81 Account,
82 DepartmentID,
83 sellRank,
84 Rank,
85 RankOrder
86 FROM
87 @provisionalProduct
88 WHERE (RankOrder BETWEEN ((@CurrentPage-1)*@MaxImumRows+1) AND (@CurrentPage*@MaxImumRows)) And (Rank>0)
89
90 SELECT @HowManyPages = COUNT(*) FROM @provisionalProduct Where Rank>0;
91
92
93 END
94 RETURN
上面存儲過程中用到的標量函數:
2
3 (@Word VARCHAR(15), --Java
4
5 @Phrase VARCHAR(1000))--java程序設計
6
7 RETURNS SMALLINT
8
9 AS
10
11 BEGIN
12
13
14 IF @Word IS NULL OR @Phrase IS NULL RETURN 0
15
16 /* @BiggerWord 比@Word長一個字符 */
17
18 DECLARE @BiggerWord VARCHAR(21)
19
20 SELECT @BiggerWord = @Word + 'x'--javax
21
22 /*在 @Phrase用@BiggerWord替換@Word */
23
24 DECLARE @BiggerPhrase VARCHAR(2000)
25
26 SELECT @BiggerPhrase = REPLACE (@Phrase, @Word, @BiggerWord)
27 --javax程序設計 --java程序設計 --java --javax
28 /* 相減結果就是出現的次數了 */
29
30 RETURN LEN(@BiggerPhrase) - LEN(@Phrase)
31 --javax程序設計9 --java程序設計8
32 END
}