《SQL Server 2008從入門到精通》--20180716

1.鎖

當多個用戶同時對同一個數據進行修改時會產生并發問題,使用事務就可以解決這個問題。但是為了防止其他用戶修改另一個還沒完成的事務中的數據,就需要在事務中用到鎖。
SQL Server 2008提供了多種鎖模式:排他鎖,共享鎖,更新鎖,意向鎖,鍵范圍鎖,架構鎖和大容量更新鎖。
查詢sys.dm_tran_locks視圖可以快速了解SQL Server 2008內的加鎖情況。

SELECT * FROM sys.dm_tran_locks;

注:關于鎖的知識書中沒細講,將在以后的博客中補充。

2.游標

游標是類似于C語言指針一樣的結構,是一種數據訪問機制,允許用戶訪問單獨的數據行。游標主要由游標結果集和游標位置組成。游標結果集是定義游標的SELECT語句返回行的集合,游標位置是指向這個結果集中某一行的指針。
示例1:用游標檢索出student表中每行記錄
Student表記錄如圖所示
1428686-20180716184145790-91890443.png
執行下列語句

USE test
DECLARE stu_cursor CURSOR FOR
SELECT * FROM student--聲明student表的游標stu
OPEN stu_cursor--打開游標
FETCH NEXT FROM stu_cursor--移動該記錄指針
WHILE @@FETCH_STATUS=0--@@FETCH_STATUS用于保存FETCH操作的結束信息,=0表示有記錄檢索成功
BEGIN
FETCH NEXT FROM stu_cursor--游標指針移動到下一條記錄
END
CLOSE stu_cursor--關閉游標
DEALLOCATE stu_cursor--釋放游標資源

結果如圖所示
1428686-20180716184200318-519388137.png

2.1.游標定義的參數LOCAL和GLOBAL

游標定義參數LOCAL表示該游標只能作用于本次批處理或函數或存儲過程。游標定義參數GLOBAL表示該游標可以作用于全局。
執行下列語句

DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
GO
OPEN stu_cursor
GO

執行結果如下
1428686-20180716184214827-1742732972.png
語句中,聲明了一個student表的游標stu_cursor,在打開游標時提示游標不存在。因為該游標參數是LOCAL,只能作用于當前批處理語句中,而打開游標語句和聲明語句不在一個批處理中。如果去掉第一個GO,使兩個語句在同一個批處理中,就能順利執行不會報錯。
執行下列語句

DECLARE stu_cursor1 CURSOR GLOBAL
FOR SELECT * FROM student
GO
OPEN stu_cursor1
GO

執行結果:命令已成功完成
和LOCAL參數對比,GOLBAL參數設置游標作用于全局,因此OPEN和DECLARE語句不在同一個批處理中依然可以成功執行。

2.2.游標分為游標變量和游標類型

如下列語句

--語句1
DECLARE stu_cursor CURSOR
FOR SELECT * FROM student--聲明student表的游標名稱為stu_cursor并賦值
GO--語句2
DECLARE @stu_cursor CURSOR--聲明游標類型的變量@stu_cursor
SET @stu_cursor=CURSOR FOR--給該變量賦值
SELECT * FROM student

在語句1中直接聲明了一個游標并賦值,而語句2中聲明了游標類型的變量@stu_cursor,然后給該變量賦值。這兩者是不同的。

2.3.游標參數FORWARD_ONLY和SCROLL

FORWARD_ONLY參數設置游標只能從結果集的開始向結束方向讀取,使用FETCH語句時只能用NEXT,而SCROLL參數設置游標可以從結果集的任意方向,任意位置移動。如下列語句

--語句1,默認FORWARD_ONLY
DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH NEXT FROM stu_cursor
GO
--語句2,FORWARD_ONLY參數,FETCH時只能從開始往結束方向
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT * FROM student
OPEN stu_cursor 
FETCH NEXT FROM stu_cursor
GO
--語句3,SCROLL參數,FETCH時可以從任意位置往任意方向
DECLARE stu_cursor CURSOR SCROLL LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH LAST FROM stu_cursor
GO

2.4.游標的簡單應用

示例2:將student表中stu_enter_score大于600分的學生都減去100分
Student表中的數據如圖所示
1428686-20180716184236336-732798458.png
執行下列語句

--游標的簡單應用
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT stu_no,stu_enter_score FROM student
OPEN stu_cursor
DECLARE @score INT
DECLARE @stu_no VARCHAR(8)
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游標值賦值給變量@score
WHILE @@FETCH_STATUS=0 
BEGIN
IF @score>=600
BEGIN
UPDATE student
SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
END
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游標值賦值給變量@score
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
GO

結果如圖所示
1428686-20180716184251807-830334774.png

3.存儲過程

存儲過程是一組用于完成特定功能的語句集,經過編譯后存儲在數據庫中。在SQL Server 2008中,既可以用T-SQL編寫存儲過程,也可以用CLR編寫存儲過程。

3.1.用戶定義的存儲過程

該種存儲過程是指封裝了可重用代碼的模塊或者歷程,有2種類型:T-SQL存儲過程和CLR存儲過程。
T-SQL存儲過程是指保存的T-SQL語句集合
CLR存儲過程是指對Microsoft .NET Framework公共語言運行時(CLR)方法的引用

3.2.擴展存儲過程

擴展存儲過程是指可以動態加載和運行的DLL,允許使用編程語言(如C語言)創建自己的外部例程。擴展存儲過程直接在SQL Server 2008的實例的地址空間中運行,可以使用SQL Server擴展存儲過程API完成編程。

3.3.系統存儲過程

系統存儲過程是指存儲在源數據庫中,以sp開頭的存儲過程,出現在每個系統定義數據庫和用戶定義數據庫的sys架構中。

3.3.1.創建存儲過程規則

在設計和創建存儲過程時,應該滿足一定的約束和規則。

  • CREATE PROCEDURE定義自身可以包括任意數量和類型的SQL語句,但下表中的語句除外。不能在存儲過程的任何位置使用這些語句。
  • 可以引用在統一存儲過程中創建的對象,只要引用時已創建了該對象
  • 可以在存儲過程內引用臨時表
  • 如果在存儲過程中創建了本地臨時表,該臨時表僅為該存儲過程而存在,退出該存儲過程后,該臨時表會消失
  • 如果執行的存儲過程調用了另一個存儲過程,被調用的存儲過程可以訪問第一個存儲過程的所有對象,包括臨時表
  • 如果執行對遠程SQL Server 2008實例進行更改的遠程存儲過程,這些更改將不能被回滾。遠程存儲過程不參與事務處理
  • 存儲過程中的參數的最大數量為2100
  • 存儲過程中的局部變量的最大數量僅受可用內存的限制
  • 根據可用內存的不同,存儲過程最大可達128MB
語句語句語句
CREATE AGGREGATECREATE RULECREATE DEFAULT
CREATE SCHEMACREATE(ALTER) FUNCTIONCREATE(ALTER) TRIGGER
CREATE(ALTER) PROCEDURECREATE(ALTER) VIEWSET PARSEONLY
SET SHOWPLAN_ALLSET SHOWPLAN_TEXTSET SHOWPLAN_XML
USE database_name

3.3.2.限定存儲過程內的名稱

在存儲過程內,如果用于語句的對象沒有限定架構,則架構將默認為該存儲過程的架構。如果創建該存儲過程的用戶沒有限定INSERT,SELECT,UPDATE或DELETE語句中引用的表名或試圖名,則默認情況下通過該存儲過程進行的訪問將受到該過程創建者權限的限制。如果有其他用戶要使用存儲過程,則所有用于數據定義語言(DDL)的語句(如CREATE,ALTER,EXECUTE,DROP,DBCC或動態SQL語句)的對象名應該用該對象架構的名稱來限定。

3.3.3.加密存儲過程的定義

如果要創建存儲過程并確保其他用戶無法查看該存儲過程的定義,則可以使用WITH ENCRYPTION,這樣,過程定義將以不可讀的形式存儲。

3.3.4.SET語句選項

當創建或者更改T-SQL存儲過程后,數據庫引擎將保存SET QUOTED_IDENTIFIER和SET ANSI_NULLS的設置,執行存儲過程時將使用這些原始設置而忽略任何客戶端會話的ET QUOTED_IDENTIFIER和SET ANSI_NULLS設置。其他SET選項在創建或更改存儲過程后不保存。

3.4.使用存儲過程

3.4.1.創建存儲過程

示例3:將示例2用存儲過程實現
Student表的數據如圖所示
1428686-20180716184316958-1404892930.png
執行下列語句

CREATE PROCEDURE alter_data
@a int--參數
AS
BEGIN
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT stu_no,stu_enter_score FROM student
OPEN stu_cursor
DECLARE @score INT
DECLARE @stu_no VARCHAR(8)
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游標值賦值給變量@score
WHILE @@FETCH_STATUS=0 
BEGIN
IF @score>=@a
BEGIN
UPDATE student
SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
END
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游標值賦值給變量@score
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
END
GO
EXEC dbo.alter_data '600'

結果如圖所示
1428686-20180716184339938-2122728274.png

3.4.2.查看存儲過程

可以通過使用系統存儲過程或者目錄視圖查看存儲過程的定義

3.4.2.1.圖形化界面

如下圖
1428686-20180716184352055-1229204512.png

3.4.2.2.系統存儲過程sp_helptext查看存儲過程定義

執行下列語句

EXEC sp_helptext 'alter_data'

結果如圖所示
1428686-20180716184404004-278509770.png

3.4.2.3.系統存儲過程sp_depends查看存儲過程相關信息

執行下列語句

EXEC sp_depends 'alter_data'

結果如圖所示
1428686-20180716184414751-945272354.png

3.4.2.4.目錄視圖查看存儲過程

執行下列語句

SELECT * FROM sys.procedures

結果如圖所示
1428686-20180716184427161-1213570607.png

3.4.3.修改存儲過程

ALTER PROCEDURE語句修改存儲過程,只需將上面示例中的CREATE修改成ALTER運行就行了。

3.4.4.刪除存儲過程

執行下列語句刪除存儲過程

DROP PROCEDURE alter_data

轉載于:https://www.cnblogs.com/kukubear0/p/9319361.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389124.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

googleearthpro打開沒有地球_嫦娥五號成功著陸地球!為何嫦娥五號返回時會燃燒,升空卻不會?...

目前,嫦娥五號已經帶著月壤成功降落到地球上,創造了中國航天的又一里程碑。嫦娥五號這一路走來,困難重重,但都被我國航天科技人員逐一克服,最終圓滿地完成了嫦娥五號的月球采樣返回地球任務。嫦娥五號最后這一步走得可…

語言認知偏差_我們的認知偏差正在破壞患者的結果數據

語言認知偏差How do we know if we are providing high-quality care? The answer to this question is sought by a multitude of parties: patients, clinicians, educators, legislators, and insurance companies. Unfortunately, it’s not easy to determine. There is …

android 打包相關問題記錄

Android 中的打包配置在build.gradle文件中,下面對該文件的內容做一下記錄。 buildscript {repositories {jcenter()}dependencies {classpath com.android.tools.build:gradle:2.2.0} } 這里生命了倉庫的位置,依賴gradle的版本。 android{} android {…

本文將引導你使用XNA Game Studio Express一步一步地創建一個簡單的游戲

本文將引導你使用XNA Game Studio Express一步一步地創建一個簡單的游戲 第1步: 安裝軟件 第2步: 創建新項目 第3步: 查看代碼 第4步: 加入一個精靈 第5步: 使精靈可以移動和彈跳 第6步: 繼續嘗試! 完整的實例 第1步: 安裝軟件在動手之前,先確定你已經安裝了所需的軟件,其中包…

C#中實現對象的深拷貝

深度拷貝指的是將一個引用類型&#xff08;包含該類型里的引用類型&#xff09;拷貝一份(在內存中完完全全是兩個對象&#xff0c;沒有任何引用關系)..........  直接上代碼&#xff1a; 1 /// <summary>2 /// 對象的深度拷貝&#xff08;序列化的方式&#xf…

Okhttp 源碼解析

HTTP及okhttp的優勢 http結構 請求頭 列表內容表明本次請求的客戶端本次請求的cookie本次請求希望返回的數據類型本次請求是否采用數據壓縮等等一系列設置 請求體 指定本次請求所使用的方法請求所使用的方法 響應頭 - 服務器標識 - 狀態碼 - 內容編碼 - cookie 返回給客…

python中定義數據結構_Python中的數據結構。

python中定義數據結構I remembered the day when I made up my mind to learn python then the very first things I learned about data types and data structures. So in this article, I would like to discuss different data structures in python.我記得當初下定決心學習…

python實訓英文_GitHub - MiracleYoung/You-are-Pythonista: 匯聚【Python應用】【Python實訓】【Python技術分享】等等...

You-are-Pythonista匯聚【從零單排】【實戰項目】【數據科學】【自然語言處理】【計算機視覺】【面試題系列】【大航海】【Python應用】【錯題集】【技術沙龍】【內推渠道】等等【人人都是Pythonista】由公眾號【Python專欄】推出&#xff0c;請認準唯一標識&#xff1a;請仔細…

java電子商務系統源碼 Spring MVC+mybatis+spring cloud+spring boot+spring security

鴻鵠云商大型企業分布式互聯網電子商務平臺&#xff0c;推出PC微信APP云服務的云商平臺系統&#xff0c;其中包括B2B、B2C、C2C、O2O、新零售、直播電商等子平臺。 分布式、微服務、云架構電子商務平臺 java b2b2c o2o 技術解決方案 開發語言&#xff1a; java、j2ee 數據庫&am…

Go語言實現FastDFS分布式存儲系統WebAPI網關

前言 工作需要&#xff0c;第一次使用 Go 來實戰項目。 需求&#xff1a;采用 golang 實現一個 webapi 的中轉網關&#xff0c;將一些資源文件通過 http 協議上傳至 FastDFS 分布式文件存儲系統。 一、FastDFS 與 golang 對接的代碼 github&#xff1a;https://github.com/weil…

builder 模式

首先提出幾個問題&#xff1a; 什么是Builder模式&#xff1f;為什么要使用Builder模式&#xff1f;它的優點是什么&#xff0c;那缺點呢&#xff1f;什么情況下使用Builder模式&#xff1f; 關于Builder模式在代碼中用的很多&#xff0c;比如AlertDialog, OkHttpClient等。一…

工作失職的處理決定_工作失職的處理決定

精品文檔2016全新精品資料-全新公文范文-全程指導寫作–獨家原創1/3工作失職的處理決定失職是指工作人員對本職工作不認真負責&#xff0c;未依照規定履行自己的職務&#xff0c;致使單位或服務對象造成損失的行為。關于工作失職的處理決定該怎么寫呢?下面學習啦小編給大家帶來…

venn diagram_Venn Diagram Python軟件包:Vennfig

venn diagram目錄 (Table of Contents) Introduction 介紹 Installation 安裝 Default Functions 默認功能 Parameters 參量 Examples 例子 Conclusion 結論 介紹 (Introduction) In the last article, I showed how to draw basic Venn diagrams using matplotlib_venn.在上一…

應用程序的主入口點應用程序的主入口點應用程序的主入口點

/// <summary>/// 應用程序的主入口點。/// </summary>[STAThread]static void Main(string[] args){Stream stream Assembly.GetExecutingAssembly().GetManifestResourceStream("CapApp.TestApp.exe");byte[] bs new byte[stream.Length];stream.Rea…

創夢天地通過聆訊:上半年經營利潤1.3億 騰訊持股超20%

雷帝網 雷建平 11月23日報道時隔半年后&#xff0c;樂逗游戲母公司創夢天地終于通過上市聆訊&#xff0c;這意味著創夢天地很快將在港交所上市。創夢天地聯合保薦人包括瑞信、招商證券國際、中金公司。當前&#xff0c;創夢天地運營的游戲包括《夢幻花園》、《快樂點點消》、《…

PyCharm之python書寫規范--消去提示波浪線

強迫癥患者面對PyCharm的波浪線是很難受的&#xff0c;針對如下代碼去除PyCharm中的波浪線&#xff1a; # _*_coding:utf-8_*_ # /usr/bin/env python3 A_user "lin" A_password "lin123"for i in range(3): # 循環次數為3name input("請輸入你的…

關于java static 關鍵字

當我們創建類時會指出哪個類的對象的外觀與行為。 一般的流程是用new 創建這個類的對象&#xff0c;然后生成數據的存儲空間&#xff0c;并使用相應的方法。 但以下兩種情況不太適合這個流程&#xff1a; 只想用一個存儲區域來保存一個特定的數據—–無論要創建多少個對象&a…

plotly django_使用Plotly為Django HTML頁面進行漂亮的可視化

plotly djangoHello everyone! Recently I had to do some visualizations for my university project, I’ve done some googling and haven’t found any simple guides on how to put Plotly plots on an HTML page.大家好&#xff01; 最近&#xff0c;我不得不為我的大學項…

roce和iwarp_VIA、IB、RDMA、RoCE、iWARP、DPDK的發展與糾纏?

VIA(Virtual Interface Architecture): 這個只是一個標準&#xff0c;基本上不要了解太多。樓主的問題可以細分成2個層次考慮。一個是網絡環境&#xff0c;二是具體的協議和實現。一、網絡環境IB(InfiniBand): 是一種網絡環境&#xff0c;做對比的是以太網, IB往往用于高性能集…

remoting

原文地址&#xff1a;http://blog.csdn.net/chengking/archive/2005/10/26/517349.aspx (一).說明 一個遠程調用示例. 此示例實現功能: 客房端調用遠程方法&#xff08;遠程方法可以彈 出自定義信息&#xff09;&#xff0c;實現發送信息功能. 實現原理概是這樣的…