我刚刚将一个新的存储过程部署到我们的测试环境中,但由于测试系统不包含该存储过程所依赖的表,所以它在执行时失败。我相信这是由于deferred name resolution .
问题是,我觉得过去有时我尝试创建存储过程,但由于缺少依赖项而失败。但我可能是错的。
无论如何,是否可以在创建存储过程期间以某种方式强制执行名称解析?如果是这样,有什么方法可以让它与 sqlcmd 以及 SSMS 一起工作吗?
通过这种方式,我们可以在脚本的推出而不是首次执行时发现缺少的依赖关系。
顺便说一句,我有兴趣阅读这个明显的 deviation from the MSDN doco关于延迟决议如何运作。
编辑:我们有 2005/2008 的混合版本(超出我的控制范围),因此我需要一个 2005 解决方案才能在这两个实例上运行。
最佳答案
您可以使用 WITH SCHEMABINDING
进行调查,但由于 Damien 链接的连接项的评论中指出的原因,这可能对您不起作用。
如果在 SQL Server 2008 上,您还可以查看 sys.sql_expression_dependencies
CREATE PROC bar
AS
SELECT *
FROM DoesNotExist
JOIN AlsoDoesNotExist ON 1=1
GO
CREATE TABLE DoesNotExist
(
X INT
)
GO
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,
referenced_entity_name
FROM sys.sql_expression_dependencies
WHERE referenced_id IS NULL
返回
referencing_entity_name referenced_entity_name
------------------------------ ------------------------------
bar AlsoDoesNotExist
关于sql-server - 有没有办法绕过 SQL Server 延迟名称解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7495490/