Bri*_*ins 18 sql-server stored-procedures sql-server-2008-r2 ddl functions
我正在尝试自动执行对 SQL Server 2008 R2 数据库执行更改的过程。我实施的流程删除并重新创建了我的存储过程和函数,以及运行脚本来更改表/列/数据。不幸的是,其中一个脚本需要首先放置其中一个函数。但是我不能先运行所有存储的过程/函数更改,因为它首先依赖于从表/列/数据更改脚本中添加的列。
我想知道是否可以在没有 SQL Server 验证函数/SP 定义中使用的列的情况下运行存储过程和函数?我尝试查找但找不到启用此功能的条件或命令。
Aar*_*and 22
您可以创建引用尚不存在的对象(例如表和函数)的存储过程。您不能创建引用已存在的对象中尚不存在的列的存储过程。这是延迟名称解析的双刃剑 - SQL Server 在某些情况下为您提供了怀疑的好处,但不是全部。请参阅 Erland 的想法,SET STRICT_CHECKS ON;
以了解有关此工作的地方和中断的地方的一些想法:
http://www.sommarskog.se/strict_checks.html
(以及他如何喜欢与您所追求的完全相反的东西-您希望允许任何内容编译而不管是否存在,并且他希望检查每一列或表。)
没有类似的设置,SET DEFERRED_NAME_RESOLUTION OFF;
尽管已被要求:
http://connect.microsoft.com/sql/127152
并且没有像IGNORE ALL_RESOLUTION;
.
您可以通过几种方式解决此问题,包括:
(a) 在受影响的存储过程中使用动态 SQL。
(b) 构建一个CREATE PROCEDURE
没有任何内容的存根,然后运行脚本的其余部分,然后运行ALTER PROCEDURE
具有真实主体的一个(本质上,分两个阶段部署该过程)。
(c) 使您的部署工具在操作顺序方面更加智能。如果表更改需要函数的存在,请最后编写这些更改的脚本。像 RedGate 的 SQL Compare 这样的模式比较工具非常适合以正确的依赖顺序为您生成脚本。你没有提到你正在使用什么工具,但如果它没有这样做......
(d) Martin Smith 有一个有趣的解决方法,但我没有玩过。
归档时间: |
|
查看次数: |
36284 次 |
最近记录: |