有没有办法绕过SQL Server延迟名称解析?

时间:2011-09-21 06:35:42

标签: sql-server stored-procedures

我刚刚在我们的测试环境中部署了一个新的存储过程,只是为了让它在执行时失败,因为测试系统没有包含存储过程所依赖的表。我相信这是由于deferred name resolution

问题是,我觉得有时在过去,我试图创建因缺少依赖项而失败的存储过程。我可能错了。

无论如何,是否有可能在创建存储过程中以某种方式强制执行名称解析?如果是这样,有没有什么方法可以使用sqlcmd和SSMS?

通过这种方式,我们可以找到关于脚本部署的缺失依赖性,而不是首次执行时。

在旁注中,我有兴趣阅读有关延迟解决方案如何工作的明显deviation from the MSDN doco

编辑:我们混合了2005/2008(不受我的控制),因此我需要一个2005解决方案来处理这两个实例。

1 个答案:

答案 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