我有各种各样的数据库对象(表,函数,视图,存储过程),每个对象都编写到自己的文件中(约束与它们更改的表在同一个文件中),我希望能够在任意顺序。这在SQL Server 2005中是否可行?
以某些对象为例:
表A(参考表B)
表B(参考函数A)
功能A(参考视图A)
查看A(参考表C)
必须按以下顺序运行:
表C
查看A
功能A
表B
表A
如果脚本乱序运行,则会抛出有关丢失对象的错误。
我问的原因是,在我正在开发的项目中,我们将每个数据库对象保存在自己的文件中(用于源代码控制),然后维护一个主脚本,以正确的顺序创建每个数据库对象。这需要在将对象添加到架构时手动编辑主脚本。我希望能够只执行文件系统中的每个脚本。
答案 0 :(得分:2)
根据我的经验,最有问题的问题是视图,它可以递归引用。我曾经编写过一个实用程序来遍历脚本,直到错误全部得到解决。这只适用于您加载所有内容时。顺序很重要 - 我认为我做了UDT,表,FK,视图(迭代),SP和UDF(迭代直到我们认为SP调用SP是一个坏主意,而UDF通常是一个坏主意。)
答案 1 :(得分:1)
如果将外键编写为单独的文件,则可以在创建所有表后运行FK脚本时删除表 - 表依赖项。
据我所知,函数和过程仅在JOIN子句中检查对象是否存在。
我发现的唯一难点是取决于视图的视图,因为视图定义要求视图所依赖的对象确实存在。
答案 2 :(得分:0)
我找到this page,作者写了一个很好的程序来完成你正在谈论的内容。听起来你只需要有两个版本,一个用于禁用约束,另一个用于重新启用。
答案 3 :(得分:0)
APEX SQL Script应该分析依赖关系并适当地命令脚本,但即使这样我也遇到了问题。