青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

Blog @ Blog

當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

常用鏈接

統計

積分與排名

BBS

Blog

Web

最新評論

SQL Server存儲過程入門案例詳解[轉]

SQL Server存儲過程入門案例詳解

存儲過程是存儲于數據庫中的一組T-SQL語句。有了存儲過程之后,與數據庫的交互就沒有必要在程序中寫一堆的SQL語句,而只需用一條語句調用適當的存儲過程來完成就可以了。另外,由于代碼是存儲在數據庫中,我們也可以在不同的應用程序或查詢窗口中不斷的重復利用那些代碼。下面將講述一些簡單的例子,它們將說明如何構造和使用存儲過程。

  下面的例子將簡單的說明如何創建存儲過程。以下所有例子均使用AdventureWorks數據庫。其它的數據庫和應用程序可以依此類推。

   1 – 簡單的存儲過程

這個簡單的存儲過程將實現如下功能:從Person.Contact表中取出第一條記錄。

CREATE PROCEDURE uspGetContact 
  AS 
  SELECT TOP 1 ContactID, FirstName, LastName 
  FROM Person.Contact

創建完上面的語句后,使用下面的命令可以執行該存儲過程。

EXEC uspGetContact

  查詢的結果如下:

  例 2 – 帶參數的存儲過程

這個例子在上個例子的基礎上做了一點修改:傳入了一個參數,根據傳入的參數來查詢相應的記錄。為了更好地利用上面的例子,這次我們就不用重新再創建一個存儲過程了,而是使用ALTER PROCEDURE(注意:不是CREATE PROCEDURE)來修改例1中已經創建好的存儲過程。代碼如下:

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50
  AS 
  SELECT TOP 1 ContactID, FirstName, LastName 
  FROM Person.Contact 
  WHERE LastName = @LastName

下面顯示了運行存儲過程的2種不同方法。第一種方法僅僅傳入了我們想要的參數值。而第二種方法包含了參數名和參數值。任意一種方法都可以運行該例中的存儲過程。

EXEC uspGetContact 'Alberts' 
EXEC uspGetContact @LastName='Alberts'

查詢結果如下:

  例 3 – 帶輸入和輸出參數的存儲過程

  這個例子中既有輸入參數也有輸出參數。在存儲過程中查詢后得到的ContactID可以利用輸出參數進行回傳?;貍鲄涤脩舨樵內藛T表中的其他字段,如ContactIDFirstName、LastName以及這個人的任何地址記錄。

首先,我們按如下方式修改存儲過程uspGetContact。其次,運行下面代碼執行該存儲過程。最后,基于傳回的值可以查詢人員的姓名和地址等信息。

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50), @ContactID INT output 
  AS 
  SELECT TOP 1 @ContactID = c.ContactID 
  FROM HumanResources.Employee a 
  INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID 
  INNER JOIN Person.Contact c ON a.ContactID = c.ContactID 
  INNER JOIN Person.Address d ON b.AddressID = d.AddressID 
  WHERE c.LastName = @LastName

存儲過程修改后,運行如下代碼將執行該存儲過程。如果ContactID有值,就會返回人員和地址信息。

DECLARE @ContactID INT 
  SET @ContactID = 0 
  EXEC uspGetContact @LastName='Smith'@ContactID=@ContactID OUTPUT 
  IF @ContactID <> 0 
  BEGIN 
  SELECT ContactID, FirstName, LastName 
  FROM Person.Contact 
  WHERE ContactID = @ContactID 
  SELECT d.AddressLine1, d.City, d.PostalCode 
  FROM HumanResources.Employee a 
  INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID 
  INNER JOIN Person.Contact c ON a.ContactID = c.ContactID 
  INNER JOIN Person.Address d ON b.AddressID = d.AddressID 
  WHERE c.ContactID = @ContactID 
  END

查詢結果如下:

   4 – 使用RAISERROR 語句的存儲過程

  在這個例子中,將把例3中的2個步驟整合到一個存儲過程中。存儲過程的第一步是取得ContactID,第二步是查詢人員的姓名和地址信息。然后添加RAISERROR語句,如果查詢不到記錄則返回錯誤信息。

RAISERROR語句可以用來控制應用程序處理無數據或其它錯誤的方式。將該存儲過程執行2次,看看能找到數據和不能找到數據的情況下各返回什么。

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50
  AS 
  DECLARE @ContactID INT 
  SELECT TOP 1 @ContactID = c.ContactID 
  FROM HumanResources.Employee a 
  INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID 
  INNER JOIN Person.Contact c ON a.ContactID = c.ContactID 
  INNER JOIN Person.Address d ON b.AddressID = d.AddressID 
  WHERE c.LastName = @LastName 
  IF @@ROWCOUNT > 0 
  BEGIN 
  SELECT ContactID, FirstName, LastName 
  FROM Person.Contact 
  WHERE ContactID = @ContactID 
  SELECT d.AddressLine1, d.City, d.PostalCode 
  FROM HumanResources.Employee a 
  INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID 
  INNER JOIN Person.Contact c ON a.ContactID = c.ContactID 
  INNER JOIN Person.Address d ON b.AddressID = d.AddressID 
  WHERE c.ContactID = @ContactID 
  END 
  ELSE 
  BEGIN 
  RAISERROR ('No record found',10,1
  END 
  EXEC uspGetContact @LastName='Walters'

  查詢結果如下:

EXEC uspGetContact @LastName='Job'

當第一步查詢無數據時,整個存儲過程的執行結果如下:

   5 -調用存儲過程的存儲過程

這個例子中有2個存儲過程。第一個存儲過程uspFindContact查找第一條帶有地址信息的記錄并將ContactID返回給調用它的存儲過程,然后顯示人員和地址信息。

CREATE PROCEDURE uspFindContact @LastName NVARCHAR(50), @ContactID INT output 
  AS 
  SELECT TOP 1 @ContactID = c.ContactID 
  FROM HumanResources.Employee a 
  INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID 
  INNER JOIN Person.Contact c ON a.ContactID = c.ContactID 
  INNER JOIN Person.Address d ON b.AddressID = d.AddressID 
  WHERE c.LastName = @LastName

下面的代碼對uspGetContact做了一點修改:調用uspFindContact并返回結果集。


ALTER
 PROCEDURE uspGetContact @LastName NVARCHAR(50
  AS 
  DECLARE @ContactID INT 
  SET @ContactID = 0 
  EXEC uspFindContact @LastName=@LastName@ContactID=@ContactID OUTPUT 
  IF @ContactID <> 0 
  BEGIN 
  SELECT ContactID, FirstName, LastName 
  FROM Person.Contact 
  WHERE ContactID = @ContactID 
  SELECT d.AddressLine1, d.City, d.PostalCode 
  FROM HumanResources.Employee a 
  INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID 
  INNER JOIN Person.Contact c ON a.ContactID = c.ContactID 
  INNER JOIN Person.Address d ON b.AddressID = d.AddressID 
  WHERE c.ContactID = @ContactID 
  END 
  ELSE 
  BEGIN 
  RAISERROR ('No record found',10,1
  END 
  EXEC uspGetContact @LastName='Walters'

   第一步查詢結果如下:

EXEC uspGetContact @LastName='Job'

  第一步查詢結果如下:

   6 -帶評論的存儲過程

  最后這個例子基于存儲過程uspGetContact,并增加了評論功能。展示了如何在一個存儲過程中使用評論。存儲過程中的評論有2種實現方式:1.使用-- 2.使用/*來作為評論的開始,以*/作為結束。其余部分和上面的例子一樣。

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50
  AS 
  /* This is a sample stored procedure to show how comments work within a stored procedure */ 
  -- declare variable 
  DECLARE @ContactID INT 
  -- set variable value 
  SET @ContactID = 0 
  -- execute stored proc and return ContactID value 
  EXEC uspFindContact @LastName=@LastName@ContactID=@ContactID OUTPUT 
  -- if ContactID does not equal 0 then return data else return error 
  IF @ContactID <> 0 
  BEGIN 
  SELECT ContactID, FirstName, LastName 
  FROM Person.Contact 
  WHERE ContactID = @ContactID 
  SELECT d.AddressLine1, d.City, d.PostalCode 
  FROM HumanResources.Employee a 
  INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID 
  INNER JOIN Person.Contact c ON a.ContactID = c.ContactID 
  INNER JOIN Person.Address d ON b.AddressID = d.AddressID 
  WHERE c.ContactID = @ContactID 
  END 
  ELSE 
  BEGIN 
  RAISERROR ('No record found',10,1
  END

  這些都是非常簡單的例子,通過這些例子,希望能讓大家知道:創建一個SQL Server的存儲過程并不難。如果能夠在查詢窗口或者應用程序中得心應手的使用查詢語句,那么按照上面的例子,也就能夠非常容易的掌握存儲過程的使用。

 

posted on 2008-10-28 17:06 isabc 閱讀(877) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

廣告信息(免費廣告聯系)

中文版MSDN:
歡迎體驗

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产日韩专区| 欧美在线亚洲| 伊人久久综合| 国产精品一区二区三区观看| 久热精品视频在线| 国产欧美精品一区aⅴ影院| 黄色成人免费网站| 午夜精品福利在线观看| 亚洲国产视频a| 99视频精品在线| 欧美黄色aa电影| 国产综合久久| 午夜天堂精品久久久久 | 欧美激情亚洲视频| 午夜精品一区二区三区在线播放| 久久久久国产精品一区三寸| 美腿丝袜亚洲色图| 欧美日韩免费看| 亚洲欧美国产精品桃花| 欧美日韩视频在线观看一区二区三区| 国产婷婷色综合av蜜臀av | 欧美日韩一区二区三区在线看 | 欧美在线看片a免费观看| 欧美日韩dvd在线观看| 亚洲国内自拍| 亚洲福利在线观看| 欧美精品一区二区三区在线看午夜| 一区二区三区在线视频观看| 一区二区久久久久| 99视频国产精品免费观看| 欧美精品免费播放| 久久精品一区二区三区中文字幕| av成人免费在线观看| 亚洲网站在线观看| 亚洲欧美日韩人成在线播放| 韩国av一区二区| 欧美激情欧美狂野欧美精品| 欧美激情乱人伦| 亚洲欧美国产视频| 久久av在线| 亚洲天堂男人| 欧美日韩成人在线播放| 欧美 日韩 国产在线| 国产一区二区三区免费在线观看| 亚洲精品久久久久久下一站| 国产精品一区二区三区久久| 日韩性生活视频| 亚洲最新在线视频| 欧美性大战久久久久久久蜜臀| 欧美国产激情| 夜夜嗨av一区二区三区网站四季av| 久久国产精品色婷婷| 久久九九久精品国产免费直播| 国产精品手机在线| 亚洲欧美综合网| 欧美日韩亚洲视频| 一级日韩一区在线观看| 亚洲一区二区av电影| 国产日韩欧美一区| 免费欧美在线| 亚洲在线播放| 久久综合九色综合欧美就去吻| 在线观看亚洲精品| 欧美三级不卡| 久久伊人亚洲| 中文欧美在线视频| 久热精品视频在线| 国产精品高精视频免费| 久久中文字幕导航| 亚洲欧美日韩另类精品一区二区三区| 久久免费午夜影院| 亚洲女人av| 亚洲黄网站黄| 国产麻豆日韩欧美久久| 久久综合色天天久久综合图片| 亚洲精品在线免费观看视频| 亚洲欧洲av一区二区| 亚洲午夜在线视频| 久久久国际精品| 亚洲男女毛片无遮挡| 亚洲精品少妇30p| 在线精品一区| 91久久久国产精品| 狠狠色丁香久久综合频道| 国产精品视频一二| 国产精品久久久久久久久久三级| 久久美女艺术照精彩视频福利播放| 一区二区三区欧美在线| 亚洲欧洲久久| 日韩一区二区福利| 一区二区欧美日韩| 在线亚洲伦理| 先锋影音国产精品| 久久国产福利国产秒拍| 欧美一区二区三区成人| 亚洲你懂的在线视频| 亚洲欧美国产制服动漫| 中国女人久久久| 西西裸体人体做爰大胆久久久| 亚洲色图自拍| 亚洲精品一二区| 亚洲欧美区自拍先锋| 久久深夜福利免费观看| 欧美大胆a视频| 亚洲视频专区在线| 久久精品国产视频| 欧美午夜不卡| 国产午夜一区二区三区| 亚洲精品国产欧美| 亚洲免费网站| 美女图片一区二区| 亚洲视频国产视频| 欧美高清hd18日本| 国内精品久久久久久久97牛牛| 在线观看成人小视频| 销魂美女一区二区三区视频在线| 美女视频黄免费的久久| 亚洲女爱视频在线| 欧美区国产区| 亚洲欧洲日本一区二区三区| 欧美在线观看一区二区三区| 亚洲国产91| 欧美激情视频网站| 亚洲区一区二区三区| 欧美成人精品激情在线观看| 久久精品国产免费观看| 欧美激情一区二区| 久久精品123| 亚洲欧美韩国| 国产日韩欧美制服另类| 亚洲综合色噜噜狠狠| 夜夜嗨av一区二区三区免费区 | 久久夜色精品国产欧美乱| 欧美激情影音先锋| 欧美国产日韩一区二区| 亚洲美洲欧洲综合国产一区| 亚洲国产婷婷| 亚洲成人在线网| 欧美日韩国产一区二区| 亚洲欧美在线免费观看| 午夜伦理片一区| 在线国产精品一区| 亚洲第一久久影院| 国产精品久久久91| 久久综合福利| 欧美黄色网络| 久久精品视频网| 欧美激情视频在线播放| 欧美一区二区三区的| 久久亚洲欧洲| 校园春色国产精品| 蜜桃av噜噜一区| 午夜视频在线观看一区| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲国产另类久久久精品极度| 亚洲国产一区二区三区青草影视 | 亚洲国产一区二区精品专区| 欧美福利一区二区| 国产午夜精品久久久久久久| 欧美不卡高清| 国内精品一区二区| 亚洲一区二区黄| 日韩亚洲欧美精品| 老鸭窝91久久精品色噜噜导演| 亚洲一区二区三区777| 久久综合久色欧美综合狠狠| 一本色道久久加勒比精品| 久久一区二区三区av| 欧美综合第一页| 欧美视频免费| 一本久道久久综合中文字幕| 亚洲国产成人不卡| 久久久蜜桃精品| 欧美国产日本在线| 亚洲人成在线播放| 久久久夜夜夜| 亚洲精品国精品久久99热| 久久久99国产精品免费| 久久精品亚洲| 欧美一区二区观看视频| 99精品国产热久久91蜜凸| 可以看av的网站久久看| 国产热re99久久6国产精品| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲一区免费视频| 国产精品成人播放| 久久精品网址| aa级大片欧美| 久久免费午夜影院| 亚洲精品午夜| 国产亚洲一区在线播放| 久久午夜电影| 亚洲你懂的在线视频| 午夜一级在线看亚洲| 在线看日韩av| 国产精品三上| 欧美成人精品影院| 久久精品国产第一区二区三区| 亚洲人成在线播放| 欧美激情精品久久久久久变态|