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

标签 sql-server stored-procedures

我刚刚将一个新的存储过程部署到我们的测试环境中,但由于测试系统不包含该存储过程所依赖的表,所以它在执行时失败。我相信这是由于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/

相关文章:

c# - 回滚后ExecuteNonQuery的返回值

mysql - 无法创建存储过程

c# - 如何从 DACFx API 获取时态表架构信息?

c# - 方法的类型参数无法从用法中推断出来。尝试明确指定类型参数

python - 使用 MS SQL ODBC 插入时出现语法错误

c++ - SQLFetch() 失败,SQLState 24000(无效游标)

sql-server - 以较低的优先级运行 SQL Server 2008 存储过程

java - 数据输出流错误

c# - 如何在 C# 中恢复 SQL Server 2012 数据库 .bak 文件?

c# - Entity Framework 无法从存储的 MySql 正确创建复杂类型