我有一个派生字段,由一系列更新语句填充,每个语句连接到不同的表和不同的字段。一系列更新以特定顺序执行是很重要的,即连接到表A可能产生结果X然后连接到表B产生结果Y,在这种情况下我想要结果Y.通常我只是创建一系列更新语句按适当的顺序将它们存储在单个SSIS SQL容器或单个存储过程中。有关在这些更新语句之间使用或不使用GO命令或BEGIN END的最佳做法吗?
答案 0 :(得分:2)
为什么你认为连续的陈述会无序执行?您是否对任何语句都有特定的锁定提示(例如UPDLOCK
,HOLDLOCK
等)?否则,如果您有两个连续的语句,A和B,并且A会改变某些内容,B将看到该更改。如果您具有一些分支或多线程功能,那么在SSIS中的工作方式可能会有所不同,但这在存储过程中是不可能的。
同样GO
不是T-SQL命令,它是由管理工作室等某些客户端工具识别的批处理分隔符。如果您尝试在存储过程中的两个语句之间放置GO
,则会发生以下两种情况之一:
BEGIN
在END
之前没有匹配的GO
。BEGIN/END
包装器),但它会比你想象的要短,结束于第一个GO
,而不是你想要的地方。答案 1 :(得分:0)
语句按照您写入的顺序执行。您不需要GO
或BEGIN...END
来确保订购。因此,使用其中任何一个都没有效果。它们也与交易无关。