SQL Server存儲過程

来源:http://www.cnblogs.com/gaofei-1/archive/2016/12/24/6215976.html
-Advertisement-
Play Games

存儲過程語法、概念、介紹;如何處理並記錄複雜存儲過程中發生的錯誤 ...


創建於2016-12-24 16:12:19


 

存儲過程

    概念:

       1.存儲過程是在資料庫管理系統中保存的、預先編譯的、能實現某種功能的SQL程式,它是資料庫應用中運用比較廣泛的

        一種數據對象。

       2.存儲過程是SQL語句和控制語句的預編譯集合,保存在資料庫里可由應用程式調用執行,而且允許用戶聲明變數、邏輯

          控制語句及其他強大的編程功能。

       3.存儲過程可包含邏輯控制語句和數據操作語句,它可以接收參數、輸出參數、返回單個或多個結果集及返回值。

       4.存儲過程可以只包含一條select語句,也可以包含一系列使用控制流的SQL語句。存儲過程可以包含個別或全部的控制

        流語句。

 

    特點:

       1.模塊化程式設計:

          只需創建一次存儲過程並將其存儲在資料庫中,以後即可在程式中反覆調用該存儲過程。

       2.執行速度快,效率高:

          如果某操作需要大量的T-SQL代碼或需要重覆執行,則存儲過程將比T-SQL批處理代碼的執行速度更快。因為存儲

          過程只在創建的時候編譯一次,而批處理代碼每次執行的時候都需要編譯。

       3.減少網路流量:

          使用存儲過程後,一個需要數百行T-SQL代碼的操作,由一條執行過程代碼的單獨語句即可實現,而不需要再網路

          中發送數百行代碼。

       4.具有良好的安全性:

          即使對於沒有直接執行存儲過程中語句的許可權的用戶,也可授予他們執行該存儲過程的許可權。不同的用戶使用不同

          的存儲過程。

       5.存儲過程分為兩類:

          系統存儲過程用戶自定義的存儲過程

 

系統存儲過程

    概括:SQL Server提供系統存儲過程,它們是一組預編譯的T-SQL語句。系統存儲過程提供了管理資料庫和更新表的機制,並

       充當從系統表中檢索信息的快捷方式。

 

    常用的系統存儲過程:

       SQL Server的系統存儲過程的名稱以“sp_”開頭,並存放在Resource資料庫中。下麵列出一些常用的系統存儲過程↓

常用的系統存儲過程 
系統存儲過程  說明
sp_databases  列出伺服器上的所有資料庫信息,包括資料庫名稱和資料庫大小
sp_ helpdb 報告有關指定資料庫或所有資料庫的信息 
sp_renamedb  更改資料庫的名稱 
sp_ tables 返回當前環境下可查詢的表或視圖的信息 
sp_ columns 返回某個表或視圖的列信息,包括列的數據類型和長度等 
sp_help  查看某個資料庫對象的信息,如列名、主鍵、約束、外鍵、索引等 
sp_helpconstraint  查看某個表的約束 
sp_helpindex  查看某個表的索引 
sp_stored_procedures  顯示存儲過程的列表 
sp_password  添加或修改登錄賬戶的密碼 
sp_helptext  顯示預設值、未加密的存儲過程、用戶定義的存儲過程、 觸發器和視圖的實際文本

 

    

 

 

 

 

 

 

 

 

 

 

    

    

    調用執行存儲過程:

       語法:    exec[ute]  [返回變數=]  存儲過程名  

                      [@參數1=]參數值1  [output]  |  [default],

 

                      ......,

 

                        [@參數n=]參數值n  [output]  |  [default]

 

       其中,exec是execute的簡寫

       如果執行存儲過程的語句時批處理中的第一個語句,則可以省略execute關鍵字。

       如果有返回值的話,可以用一個變數接收。但是在存儲過程內return只能返回數值類型

       output表明參數是輸出參數,default表示參數的預設值。

       如果不按照參數順序傳遞參數值,則要指定參數名。

       一旦某個參數按照"@參數名=參數值"格式傳遞數據,那麼該參數之後的其他參數都必須以同樣的格式傳遞參數

       值。

 

    常用的擴展存儲過程:

       擴展存儲過程是SQL Server提供的各類系統存儲過程中的一類,允許使用其他編程語言創建外部存儲過程,為資料庫用

       戶提供從SQL Server實例到外部程式的介面,以便進行各種維護活動。通常以"xp_"作為首碼,以DLL形式單獨存在。

       語法:    exec  xp_cmdshell  DOS命令  [no_output]

              其中,exec表示調用存儲過程,no_output為可選參數,設置執行DOS命令後是否輸出返回信息。

 

 

用戶自定義的存儲過程

    組成:

       1.輸入參數和輸出參數。

       2.在存儲過程中執行的T-SQL語句。

         3.存儲過程的返回值。

 

    語法:

       1.創建語法:

             create  proc[edure]  存儲過程名

                [{@參數1  數據類型}  [=預設值]  [output],

                ......,

                 {@參數n  數據類型}  [=預設值]  [output]

                ]

             as

                SQL語句

       2.刪除語法:

             drop  proc[edure]  存儲過程名

       3.判斷存儲過程是否存在,如果存在,則刪除

             if  exists(select  *  from sysobjects where name = 存儲過程名)

                drop  proc[edure]  存儲過程名

             go

    語法釋義:

       1.創建:

             proc是procedure的簡寫,參數的預設值可選,不寫則沒有預設值,調用執行時必須帶有此參數。output

             表示是輸出參數,即執行存儲過程後把返回值存放在輸出參數中。就像C#中的引用傳遞一樣。輸出參數也

             可以設置預設值。不寫output則為輸入參數,就像C#中的值傳遞一樣。

             另外需註意,存儲過程中參數的預設值不能是系統函數。比如參數是時間類型,預設值不能是

             GETDATE()

 

 

處理錯誤信息

    概念:在存儲過程中,可以使用print語句顯式用戶定義的錯誤信息,但這些是臨時的,並不保存錯誤信息。使用raiserror語句

       可以指定嚴重級別並設置系統變數記錄所發生的錯誤。

 

    raiserror語句:

       語法:

             raiserror  ({msg_id  |  msg_str}  {,  severity,  state}  [with  option [...n]])

       語法釋義:

             msg_id:  在sysmessages系統表中指定的用戶定義錯誤信息。

             msg_str:  用戶定義的特定信息,最長為255個字元。

             severity:   與特定信息關聯,表示用戶定義的嚴重性級別。用戶可使用的級別為0~18級;19~25級是

                     為sysadmin固定角色的成員預留的,並且需要指定with  log選項;20~25級被認為是致命

                     錯誤。

             state:   表示錯誤的狀態,是1~255中的值。

             option:   錯誤的自定義選項,可以是下列任一值

                     a. log:    在Microsoft SQL Server資料庫引擎實例的錯誤日誌和應用程式日誌中記

                            錄錯誤。

                     b. nowait:  將消息立即發送給客戶端。

                     c. seterror:  將@@error值和error_nummber值設置為msg_id或50000,不用考慮

                            嚴重級別。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 四、Others部分、技術類1、http狀態碼有哪些?分別代表是什麼意思?2、說說創建ajax的過程3、一個頁面從輸入 URL 到頁面載入顯示完成,這個過程中都發生了什麼?4、說說你對網站重構的理解?5、網頁驗證碼是幹嘛的,是為瞭解決什麼安全問題。6、請說出三種減少頁面載入時間的方法。7、你有用 ...
  • 搞PC項目,最頭疼的莫過於做IE6/7/8的相容性(很蛋疼的事)。而在如今移動端H5的興起中,面對形形色色的機型,各種各樣的品牌手機,導致我嗎們FE們要做各種手機適配問題、樣式相容問題等等(巨煩,找問題還不好找)。以下是在移動端項目之路上所遇到的各種問題: UC瀏覽器——css3的坑 最近在做一個移 ...
  • 在之前的博文《Android中使用ViewPager實現屏幕頁面切換和引導頁效果實現》和《Android中Fragment的兩種創建方式》以及《Android中Fragment與Activity之間的交互(兩種實現方式)》中我們介紹了ViewPager以及Fragment各自的使用場景以及不同的實現 ...
  • 不同於Windows 8應用,Windows 10引入了“漢堡菜單”這一導航模式。說具體點,就拿官方的天氣應用來說,左上角三條橫杠的圖標外加一個SplitView控制項組成的這一導航模式就叫“漢堡菜單”。 本文討論的是如何實現官方的這一樣式(點擊後左側出現一個填充矩形),普通實現網上到處都是,有需要的 ...
  • 一、概述 運行時變更就是設備在運行時發生變化(例如屏幕旋轉、鍵盤可用性及語言)。發生這些變化,Android會重啟Activity,這時就需要保存activity的狀態及與activity相關的任務,以便恢復activity的狀態。 為此,google提供了三種解決方案: 下麵會逐一介紹三種情況,其 ...
  • 當我們要在App實現功能:輸入地名,編碼為經緯度,實現導航功能。 那麼,我需要用到原生地圖中的地理編碼功能,而在Core Location中主要包含了定位、地理編碼(包括反編碼)功能。 在文件中導入 #import <CoreLocation/CoreLocation.h> 地理編碼: 地理反編碼: ...
  • 備註:oracle版本Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 說明:創建臨時表空間註意關鍵字和創建表空間有所差別,語句類似 關於創建語句解說請查看:http://blog.chinaunix.net/uid-20802110 ...
  • 1.地址 2.Units單位 1 配置大小單位,開頭定義了一些基本的度量單位,只支持bytes,不支持bit 2 對大小寫不敏感 3.includes包含 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...