将多个TSQL更改脚本与跳过组合在一起

时间:2009-11-20 15:29:55

标签: tsql

我有一堆TSQL更改脚本,所有脚本都按顺序命名。

我希望将这些内容组合成一个大脚本,并有一些曲折。我在脚本中包含一个版本号函数,我为每个脚本更新,以便一旦运行更改1,它将返回1,一旦运行2,它将返回2,依此类推。此函数保留在数据库中,并始终返回架构/数据库的版本。

我想用几行来包装每个更改脚本,以阻止已经运行的脚本再次运行,同样它应该阻止更改脚本在太“低”的架构版本上运行。这允许我将所有更改脚本集中在一起,并且只有当它全部运行时才会应用缺少的更改脚本。

这一切都很好,但我找不到一种方法让osql / Query Analyzer / Sql Server Studio跳过已经运行的部分。

  • GOTO不会批量生产(脚本包含“GO”)
  • 如果由于GO
  • ,BEGIN END将无法正常工作

更新:重申一下,我不需要帮助记住当前版本号,我需要一种方法来跳过部分脚本以防止已经应用的更新重新应用。

我尝试了很多方法:

  • 我可以用db_executeSql语句或EXECUTE包装批处理,但这会导致范围问题。
  • 我可以将每个批处理包装在IF dbo.DB_VERSION()!=REQUIRED_VERSION THEN BEGIN .... END构造中,但这很麻烦并且使处理错误变得困难。

遇到不应用更改的情况是预期的,并非特殊情况。因此,如果不适用,只需RETURN就行了。

还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

如果是表格,您可以保留版本号,并使用该函数检查表格中的值,并在IF语句中与您希望进行的更改版本进行比较。