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