我刚刚在我们的测试环境中部署了一个新的存储过程,只是为了让它在执行时失败,因为测试系统没有包含存储过程所依赖的表。我相信这是由于deferred name resolution。
问题是,我觉得有时在过去,我试图创建因缺少依赖项而失败的存储过程。我可能错了。
无论如何,是否有可能在创建存储过程中以某种方式强制执行名称解析?如果是这样,有没有什么方法可以使用sqlcmd和SSMS?
通过这种方式,我们可以找到关于脚本部署的缺失依赖性,而不是首次执行时。
在旁注中,我有兴趣阅读有关延迟解决方案如何工作的明显deviation from the MSDN doco。
编辑:我们混合了2005/2008(不受我的控制),因此我需要一个2005解决方案来处理这两个实例。
答案 0 :(得分:4)
您可以调查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