SQLSERVER创建该存储过程时不会出错,但是执行存储过程时报错

创建该存储过程时,不会出错,但是执行存储过程时,会报出下面这样的错误

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

注意:

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

---存储过程删除中间表R_LDBG_B1_TEMP,但这条没执行成功。

if OBJECT_ID(‘R_LDBG_B1_TEMP‘,‘U‘) IS NOT NULL
   drop table R_LDBG_B1_TEMP

原因分析: R_LDBG_B1_TEMP表字段结构在执行另一个存储过程时发生变化导致其它存储过程引用了不存在的字段。

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

有两个解决办法:

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

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

时间: 2025-01-02 06:51:44

SQLSERVER创建该存储过程时不会出错,但是执行存储过程时报错的相关文章

ORACEL创建存储过程和根据Oracle定时任务机制执行存储过程

oracle定时执行存储过程 --创建一个存储过程,每天定时执行,将满足条件的设备插入到pinpai_Report表中. CREATE OR REPLACE procedure prc_job_report is begin INSERT into pinpai_Report SELECT s.type, s.remark, G .GROUPID, s."CATEGORY" CATEGORY, s.DEVTYPE devtype, s.VENDOR vendor, SUM (CASE

mysql 存储过程中使用事物+事件定时执行存储过程

(1)存储过程 DROP PROCEDURE IF EXISTS proc_test; CREATE PROCEDURE proc_test() BEGIN DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; START TRANSACTION; insert into score_record_bak(openid, nickname, city_id, city

EF中执行存储过程

SqlParameter[] parms = new SqlParameter[5]; SqlParameter parms0 = new SqlParameter("IsAll", int.Parse(parames.P1)); //生成一个参数并给参数赋值. SqlParameter parms1 = new SqlParameter("ForumId", int.Parse(parames.P2)); SqlParameter parms2 = new Sql

水晶报表 Crystal Report 调用存储过程时出错 找不到表 ,解决方法。

用 CrystalReportViewer1 控件在asp.net的网页上显示报表,如果做报表时调用数据表数据的方式调用是可以成功的,但报表是用存储过程获取数据方式会出现以下错误: 找不到表'RptOpenCheck;1' . 文件 G:\TEMP\FO-OpenCheck {6D191F06-DECF-4A25-88FC-8553E3D435AA}.rpt 内出错: 找不到表. Error: 未将对象引用设置到对象的实例. The table 'RptOpenCheck;1' could no

创建Android项目时出错——No resource found that matches the given name 'Theme.AppCompat.Light'

创建Android项目时出错,error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'. 问题描述: 创建一个Android应用项目时,需指定其适用的SDK版本,默认如下图: 最低适用版本为:API 8: Android 2.2 (Froyo) 目标版本为:API 21: Android 4.X (L Preview) 编译版本为:A

windows 2008创建群集“xxx”时出错。由于超时时间已过,该操作返回

操作系统环境:windows 2008 Enterprise R2 SP1 验证群集配置时未发现任何的错误.但在创建故障转移群集时,出现超时错误的现象:"创建群集时出错.创建群集"xxx"时出错.由于超时时间已过,该操作返回.". 尝试单独选择一台服务器群集创建成功,但添加第二节点时,一直卡在"正在等待节点xxx 成为群集的完成起作用成员的通知",直到超时出错退出"由于超时时间已过,该操作返回." 排错过程: 使用单一节点创建

主库创建存储过程时从库显示 Error 1049

MySQL Bugs: #72682: Replication MBR halts - stored procedure from unreplicated schema MySQL Bugs: #59135: replicate-wild-do-table: cross-database updates and create SPs break replication 如果从库只使用了replicate-wild-do-table,那么当主库创建存储过程时,从库会不同步,报错信息如下: 150

[问题]SqlServer创建数据库出错

SqlServer 2008 “Msg 1807, Level 16, State 3, Line 1Could not obtain exclusive lock on database ‘model’. Retry the operation later.Msg 1802, Level 16, State 4, Line 1CREATE DATABASE failed. Some file names listed could not be created. Check related er

(转)创建DB2实例时出错,请大家帮忙解决

创建DB2实例时出错,请大家帮忙解决 原文:http://bbs.chinaunix.net/thread-3601748-1-1.html 运行:$DB2DIR/instance/db2icrt  -u db2fadm1 db2inst1 出现错误:            Program name = db2idbmInstance home dir = /db2inst1,   Sysadm group = db2iadm1Instance type = 1,  Auth type = SE