我有一個由一系列更新語句填充的派生字段,每個語句連接到不同的表和不同的字段。一系列更新以特定順序執行是非常重要的,例如,與表A的連接可能產生結果X,然後與表B的連接產生結果Y,在這種情況下,我想要結果Y.通常,我只是創建一系列更新語句以適當的順序,並將它們存儲在單個SSIS SQL容器中或單個存儲過程中。在這些更新語句之間是否有使用或不使用GO命令或BEGIN END的最佳做法?T-SQL GO UPDATE語句
-1
A
回答
0
按照您寫入的順序執行語句。您不需要GO
或BEGIN...END
以確保排序。出於這個原因,使用其中任何一個都沒有作用。它們也與交易無關。
2
爲什麼你認爲連續的語句會被亂序執行?你是否對任何陳述有特定的鎖定提示(例如UPDLOCK
,HOLDLOCK
等)?否則,如果您有兩個連續的語句,A和B和A會更改某些內容,B會看到該更改。如果您有一些分支或多線程功能,SSIS中的工作方式可能會有所不同,但這在存儲過程中不可行。
另外GO
不是T-SQL命令,它是由某些客戶端工具(如Management Studio)識別的批分隔符。如果你試圖把在存儲過程的語句GO
二者之間,兩件事情之一會發生:
- 的程序將無法編譯(如果開
BEGIN
沒有GO
前右匹配的END
)。 - 該程序將編譯(如果沒有
BEGIN/END
包裝),但它會比你想象的要短,在第一個GO
而不是你想要的地方結束。
相關問題
- 1. 在TSQL UPDATE中使用IF語句
- 2. SQL UPDATE語句
- 3. Update語句
- 4. 寫update語句
- 5. Update語句rethinkdb
- 6. 在Update語句
- 7. Update語句2005
- 8. SQL update語句
- 9. Update語句
- 10. TSQL:生成Update語句隨機字符串
- 11. SQLite的UPDATE語句
- 12. 準備語句UPDATE
- 13. SQLiteException:在UPDATE語句
- 14. Update語句在SQL
- 15. 將UPDATE語句轉換爲SELECT語句
- 16. MySQL IF語句觸發內UPDATE語句
- 17. 轉換UPDATE語句的SELECT語句
- 18. 錯誤的TSQL DISABLE和ENABLE語句
- 19. TSQL使EXECUTE語句同步
- 20. Oracle和TSQL語句NO LOCK
- 21. TSQL反向LIKE語句
- 22. mysql的update語句太長
- 23. DB2的UPDATE JOIN語句
- 24. SQLITE散裝UPDATE語句
- 25. 格式化SQL Update語句
- 26. 使用FOR UPDATE語句
- 27. 加入表的UPDATE語句
- 28. UPDATE語句存在阻止
- 29. 錯誤:在UPDATE語句
- 30. MySQL的UPDATE語句超時
謝謝你的答案。我目前正在進行的更新涉及一些大型表格,並加入了多個服務器和數據庫,因此我希望儘可能提高效率。我看到提到日誌大小,小批量和事務的線程T-SQL GO語句。然後我在SS 2000 DTS中回憶說,我在一個步驟中添加了一個額外的更新,並且該包從未意識到我已經做出了更改。我終於把它分成了單獨的容器/交易(不知道那裏的approp術語。)所以我想知道是否有一些連接。 – Roxie 2013-03-26 18:57:56