SQL SERVER创建存储过程不报错,但是执行存储过程报错

发布时间:2017-10-13编辑:佚名阅读(1863)

创建该存储过程时,不会出错,但是执行存储过程时,会报出这样的错误:对象名/列名“***”无效

这是因为在存储过程创建时,它先做语法检查,如果通过了语法检查,它会尝试解析它包含的对象名,如果存在也会解析该对象引用的对象是否存在。如果引用的对象名不存在,解析会在存储过程首次执行时触发。即在首次执行存储过程时,查询处理器从 sys.sql_modules 目录视图中读取该存储过程的文本,并检查该过程所使用的对象名称是否存在。这一过程称为延迟名称解析,因为存储过程引用的表对象不需要在创建该存储过程时就存在,而只需在执行该存储过程时存在。

注意:  

只有当引用的表对象不存在时才能使用延迟名称解析。所有其他对象在创建所存储的过程时必须存在。例如,引用所存储的过程中的一个现有表时,不能列出该表不存在的列。

执行存储过程时先解析,当发现引用表中不存在的字段就会直接报错,无法执行。

有两个解决办法:

1) 在外部编程执行存储过程前删除中间表(临时表)。

2) 在存储过程内部执行最后删除中间表(临时表)。

  关键字:SQL SERVER创建存储过程不报错执行存储过程报错


鼓掌

1

正能量

0

0

呵呵

0


评论区