- SQL Server 2016從入門到精通(視頻教學超值版)
- 王英英
- 1127字
- 2019-12-06 15:49:30
5.6 批處理語句
批處理是從應用程序發送到SQL Server并得以執行的一條或多條T-SQL語句。使用批處理時,有下面一些注意事項。
- 一個批處理中只要存在一處語法錯誤,整個批處理都無法通過編譯。
- 批處理中可以包含多個存儲過程,但除第一個過程外,其他存儲過程前面都必須使用EXECTUE關鍵字。
- 某些特殊的SQL指令不能和別的SQL語句共存在一個批處理中,如CREATE TABLE和CREATE VIEW語句。這些語句只能獨自存在于一個單獨的存儲過程中。
- 所有的批處理使用GO作為結束的標志,當編譯器讀到GO的時候就把GO前面的所有語句當成一個批處理,然后打包成一個數據包發給服務器。
- GO本身不是T-SQL的組成部分,只是一個用于表示批處理結束的前端指令。
- CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE SCHEMA、CREATE TRIGGER和CREATE VIEW語句不能在批處理中與其他語句組合使用。批處理必須以CREATE語句開頭,所有跟在該批處理后的其他語句將被解釋為第一個CREATE語句定義的一部分。
- 不能在刪除一個對象之后,在同一批處理中再次引用這個對象。
- 如果EXECUTE語句是批處理中的第一句,則不需要EXECUTE關鍵字。如果EXECUTE語句不是批處理中的第一條語句,則需要EXECUTE關鍵字。
- 不能在定義一個CHECK約束之后,在同一個批處理中使用。
- 不能在修改表的一個字段之后,立即在同一個批處理中引用這個字段。
- 使用SET語句設置的某些選項值不能應用于同一個批處理中的查詢。
在編寫批處理程序時,最好能夠以分號結束相關的語句。數據庫雖然不強制要求,但是筆者還是強烈建議如此處理。一方面這有利于提高批處理程序的可讀性。批處理程序往往用來完成一些比較復雜的成套的功能,而每條語句則完成一項獨立的功能。此時為了提高其可讀性,最好能夠利用分號來進行語句與語句之間的分隔。二是與未來版本的兼容性。SQL Server數據庫在設計的時候,一開始這方面就把關不嚴。現在大部分的標準程序編輯器都實現了類似的強制控制。根據現在微軟官方提供的資料來看,在以后的SQL Server數據庫版本中,這個規則可能會成為一個強制執行的規則,即必須在每條語句后面利用分號來進行分隔。為此為了能夠跟后續的SQL Server數據庫版本進行兼容,最好從現在開始就采用分號來分隔批處理程序中的每條語句。
SQL Server提供了語句級重新編譯功能。也就是說,如果一條語句觸發了重新編譯,則只重新編譯該語句而不是整個批處理。此行為與SQL Server 2000不同。考慮下面的例子,其中在同一批處理中包含1條CREATE TABLE語句和3條INSERT語句。

在SQL Server中,首先,對批處理進行編譯。對CREATE TABLE語句進行編譯,但由于表dbo.t3尚不存在,因此,未編譯INSERT語句。然后,批處理開始執行。表已創建。編譯第一條INSERT語句,然后立即執行。表現在有一行。然后,編譯第二條INSERT語句。編譯失敗,批處理終止。SELECT語句返回一行。
而在SQL Server 2016中,批處理開始執行,同時創建了表。逐一編譯3條INSERT語句,但不執行。因為第二條INSERT語句導致一個編譯錯誤,因此,整個批處理都將終止。SELECT語句未返回任何行。
- LabVIEW程序設計基礎與應用
- FreeSWITCH 1.8
- 看透JavaScript:原理、方法與實踐
- 實用防銹油配方與制備200例
- C#程序設計(慕課版)
- JavaScript+jQuery開發實戰
- 從學徒到高手:汽車電路識圖、故障檢測與維修技能全圖解
- SQL基礎教程(視頻教學版)
- 軟件項目管理實用教程
- Apache Kafka Quick Start Guide
- Kotlin進階實戰
- C# 7.1 and .NET Core 2.0:Modern Cross-Platform Development(Third Edition)
- Practical Responsive Typography
- SOA Patterns with BizTalk Server 2013 and Microsoft Azure(Second Edition)
- Implementing Splunk(Second Edition)