【发布时间】:2012-05-04 21:23:33
【问题描述】:
我有一堆 TSQL 更改脚本,都按顺序适当命名。
我想将它们组合成一个带有一些曲折的大脚本。我在我为每个脚本更新的脚本中包含一个版本号函数,这样一旦运行更改 1,它就会返回 1,一旦运行 2,它就会返回 2,依此类推。此函数保留在数据库中,并始终返回架构/数据库的版本。
我想用几行包装每个更改脚本,以防止已经运行的脚本再次运行,同样它应该防止更改脚本在太“低”的架构版本上运行。这使我可以将所有更改脚本集中到一个中,并且当它全部运行时,只会应用缺少的更改脚本。
这一切都很好,但是我找不到让 osql / Query Analyzer / Sql Server Studio 跳过已经运行的部分的方法。
- GOTO 不能跨批次工作(脚本包含“GO”)
- IF BEGIN END 由于 GO 而无法正常工作
更新:重申一下,我不需要帮助记住当前版本号,我需要一种方法来跳过部分脚本以防止重新应用已应用的更新。
我尝试了很多方法:
- 我可以将批处理包装在
db_executeSql语句或EXECUTE中,但这会导致范围界定问题。 - 我可以将每个批次包装在一个 IF
dbo.DB_VERSION()!=REQUIRED_VERSION THEN BEGIN .... END构造中,但这很麻烦,并且难以处理错误。
遇到不应应用更改的情况是意料之中的,这不是例外情况。所以在不适用的时候简单地RETURNing 是不行的。
还有其他建议吗?
【问题讨论】:
标签: tsql