将多个TSQL更改脚本与跳过相结合
我有一堆TSQL更改脚本,它们都按顺序正确命名 我想把这些结合成一个大剧本,再加上一些曲折。我在脚本中包含一个版本号函数,为每个脚本更新该函数,以便在运行change1时返回1,在运行change2时返回2,依此类推。此函数保留在数据库中,并始终返回架构/数据库的版本 我想用几行代码来包装每个更改脚本,以防止已经运行的脚本再次运行,同样,它应该防止更改脚本在太“低”的模式版本上运行。这允许我将所有更改脚本组合成一个,并且在所有更改脚本运行时只应用缺少的更改脚本 这一切都很好,但我无法找到让osql/Query Analyzer/Sql Server Studio跳过已经运行的部分的方法将多个TSQL更改脚本与跳过相结合,tsql,Tsql,我有一堆TSQL更改脚本,它们都按顺序正确命名 我想把这些结合成一个大剧本,再加上一些曲折。我在脚本中包含一个版本号函数,为每个脚本更新该函数,以便在运行change1时返回1,在运行change2时返回2,依此类推。此函数保留在数据库中,并始终返回架构/数据库的版本 我想用几行代码来包装每个更改脚本,以防止已经运行的脚本再次运行,同样,它应该防止更改脚本在太“低”的模式版本上运行。这允许我将所有更改脚本组合成一个,并且在所有更改脚本运行时只应用缺少的更改脚本 这一切都很好,但我无法找到让osq
- GOTO无法跨批工作(脚本包含“GO”)
- 如果开始结束也不会因为去而起作用
- 我可以用
语句或db\u executeSql
来包装批处理,但这会导致范围界定问题EXECUTE
- 我可以用IF
construct,但这很混乱,并且使处理错误变得困难dbo.DB\u VERSION()包装每个批=所需的\u版本,然后开始。。。。结束
RETURN
ing当不适用时是不合适的
还有其他建议吗?您可以将版本号保留在表中,并使用该功能检查表中的值,并在if语句中与您希望进行的更改的版本进行比较。您好,感谢您抽出时间,但我的问题是没有保留版本号。用户定义的函数可以很好地处理这个问题,而不需要表的开销。我需要的是,一旦确定已经应用了更改,就可以跳过TSQL脚本的各个部分。特别是一种跳过批(由GO语句删除)的方法,因为GOTOs和IF BEGIN END构造只适用于一个批。