sql解析存储过程

        创建存储过程时,SQL Server先分析代码以检查语法错误。如果代码通过语法检查,SQL Server将会尝试解析它所包含的名称。解析过程会验证对象名称和列名称是否存在。若引用对象存在,解析过程将被完整的执行,就是说它还会继续检查引用的列名称是否存在。

        如果对象名称存在,但其中的列不存在,解析过程将生成一个错误,该存储过程将不会被创建。若对象根本不存在,SQL Server却可以创建存储过程,并把解析过程推迟到调用存储过程时在执行。


演示一下:

        以下代码确保数据库中tempdb不存在存储过程usp_Proc1, usp_Proc2和表T1

        USE tempdb;

GO 

IF OBJECT_ID(‘dbo.usp_Proc1’) IS NOT NULL

     DROP PROC dbo.usp_Proc1;

GO IF OBJECT_ID(‘dbo.usp_Proc2’)  IS NOT NULL

    DROP PROC dob.usp_Proc2;

IF OBJECT_ID('dbo.T1') IS NOT NULL

    DROP TABLE dbo.T1;


运行以下代码创建存储过程usp_Proc1,它引用表T1,而该表不存在

CREATE PROC dbo.usp_Proc1

AS 

SELECT col1 FROM T1;

GO

表T1不存在,解析将被推迟到运行时执行,存储过程可以顺利地被创建。

如果调用该存储过程时T1不存在,运行时将失败

如:EXEC dbo.usp_Proc1; 将会产生错误


创建表T1

CREATE TABLE T1(col1 INT);

INSERT INTO dbo.T1(col1) VALUES(1);

再次调用该存储过程,成功


然后创建存储过程usp_Proc2,引用已存在的T1表中不存在的col2列。

CREATE PROC usp_Proc2

AS

SELECT col2 FROM T1;

GO

该存储过程创建不成功。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值