UPDATE语句中的T-SQL GO

时间:2013-03-26 16:29:02

标签: sql-server sql-server-2008 tsql

我有一个派生字段,由一系列更新语句填充,每个语句连接到不同的表和不同的字段。一系列更新以特定顺序执行是很重要的,即连接到表A可能产生结果X然后连接到表B产生结果Y,在这种情况下我想要结果Y.通常我只是创建一系列更新语句按适当的顺序将它们存储在单个SSIS SQL容器或单个存储过程中。有关在这些更新语句之间使用或不使用GO命令或BEGIN END的最佳做法吗?

2 个答案:

答案 0 :(得分:2)

为什么你认为连续的陈述会无序执行?您是否对任何语句都有特定的锁定提示(例如UPDLOCKHOLDLOCK等)?否则,如果您有两个连续的语句,A和B,并且A会改变某些内容,B将看到该更改。如果您具有一些分支或多线程功能,那么在SSIS中的工作方式可能会有所不同,但这在存储过程中是不可能的。

同样GO不是T-SQL命令,它是由管理工作室等某些客户端工具识别的批处理分隔符。如果您尝试在存储过程中的两个语句之间放置GO,则会发生以下两种情况之一:

  1. 该过程将无法编译(如果开头BEGINEND之前没有匹配的GO
  2. 程序将编译(如果没有BEGIN/END包装器),但它会比你想象的要短,结束于第一个GO,而不是你想要的地方。

答案 1 :(得分:0)

语句按照您写入的顺序执行。您不需要GOBEGIN...END来确保订购。因此,使用其中任何一个都没有效果。它们也与交易无关。