2013-03-26 123 views
-1

我有一個由一系列更新語句填充的派生字段,每個語句連接到不同的表和不同的字段。一系列更新以特定順序執行是非常重要的,例如,與表A的連接可能產生結果X,然後與表B的連接產生結果Y,在這種情況下,我想要結果Y.通常,我只是創建一系列更新語句以適當的順序,並將它們存儲在單個SSIS SQL容器中或單個存儲過程中。在這些更新語句之間是否有使用或不使用GO命令或BEGIN END的最佳做法?T-SQL GO UPDATE語句

回答

0

按照您寫入的順序執行語句。您不需要GOBEGIN...END以確保排序。出於這個原因,使用其中任何一個都沒有作用。它們也與交易無關。

+0

謝謝你的答案。我目前正在進行的更新涉及一些大型表格,並加入了多個服務器和數據庫,因此我希望儘可能提高效率。我看到提到日誌大小,小批量和事務的線程T-SQL GO語句。然後我在SS 2000 DTS中回憶說,我在一個步驟中添加了一個額外的更新,並且該包從未意識到我已經做出了更改。我終於把它分成了單獨的容器/交易(不知道那裏的approp術語。)所以我想知道是否有一些連接。 – Roxie 2013-03-26 18:57:56

2

爲什麼你認爲連續的語句會被亂序執行?你是否對任何陳述有特定的鎖定提示(例如UPDLOCK,HOLDLOCK等)?否則,如果您有兩個連續的語句,A和B和A會更改某些內容,B會看到該更改。如果您有一些分支或多線程功能,SSIS中的工作方式可能會有所不同,但這在存儲過程中不可行。

另外GO不是T-SQL命令,它是由某些客戶端工具(如Management Studio)識別的批分隔符。如果你試圖把在存儲過程的語句GO二者之間,兩件事情之一會發生:

  1. 的程序將無法編譯(如果開BEGIN沒有GO前右匹配的END )。
  2. 該程序將編譯(如果沒有BEGIN/END包裝),但它會比你想象的要短,在第一個GO而不是你想要的地方結束。