2009-11-09 141 views
14

在Transact-SQL中,批處理是一組作爲一個組一起提交併作爲一個組執行的SQL語句。批可以存儲在命令文件中。什麼是批次?

包含幾個SQL語句的* .sql文件被認爲是批處理?我們還有什麼考慮一批?

+1

這個問題只與tsql有關?聞起來有點像功課... – 2009-11-09 21:16:23

+0

看到標籤。 TSQL。 – 2009-11-09 21:18:53

+3

這不是作業 – carewithl 2009-11-10 18:37:10

回答

8

是一個* .sql文件,其中包含幾個被視爲批處理的sql語句?

的排序。一個* .sql文件實際上可以包含多個批次。您可以通過批分隔符分隔批次。您可能需要多個批處理文件,因爲某些語句(特別是某些「ALTER」命令)每批只能執行一次。這可能會使得像在循環中執行ALTER一樣棘手。

這裏的另一個訣竅是如何分離文件/文檔中的各個批次。在99%的Sql Server工具中,批量分隔符是「GO」。然而,這是可以通過工具配置的東西,因此你會偶爾遇到奇怪的人,然後誰使用別的東西。

+2

1)我不確定我是否理解爲什麼批量生產是一件好事(我意識到某些報表只能每批執行一次,但如果批次不存在,那麼我們就不會有這個問題),因此爲什麼Sql服務器開發團隊認爲引入批次是個好主意? 2)除了某些語句每批只能執行一次外,還有其他什麼原因,爲什麼我們會將一堆語句放到幾個不同批次中,而不是將它們全部放入一個批次中? – carewithl 2009-11-10 18:36:33

+2

某些其他語句(SET選項)將應用到批次結束時。 – 2009-11-10 19:24:34

+1

thanx幫助我 – carewithl 2009-11-11 19:58:37

6

批處理不屬於TSQL,它們是SQL Management Studio編輯器的一個功能。因此,例如,您不能提交帶有「GO」的ADO.NET命令對象作爲命令文本的一部分。

批處理標記 - 「GO」指示查詢編輯器在執行過程中繼續執行之前將SQL提交到該點。

可以將查詢編輯器配置爲在「GO」旁邊使用不同的批處理標記,但這隻會讓人感到困惑。

+1

他們是TSQL的一部分。您也可以在ADO.NET中使用多個命令發送批處理。 – erikkallen 2009-11-10 19:10:02

+1

我相信你錯了。這是GO命令上的MSDN TSQL參考頁面:http://msdn.microsoft.com/en-us/library/ms188037.aspx – 2009-11-10 20:37:05

+1

關於第二個想法,我明白你的意思。原始問題中的批處理定義是正確的,批處理會影響TSQL語句的執行。 – 2009-11-10 20:45:04

3

從聯機叢書

創建默認值,CREATE FUNCTION,CREATE PROCEDURE,創建規則,創建架構CREATE TRIGGER和CREATE VIEW語句不能在一個批處理中的其它語句組合。 CREATE語句必須啓動批處理。該批處理中的所有其他語句都將被解釋爲第一個CREATE語句定義的一部分。

無法更改表格,然後在同一批次中引用新列。

由此可以推斷,在嘗試使用它們之前,需要多個批次以確保數據庫結構更改生效。