SQL Server 存储过程中的表变量名加上'[]'后出现执行错误
之前工作中编写存储过程(SQL Server 2005),声明了一个表变量,在SELECT ...FROM 表变量名 的时候,按回车插件SQL Prompt 4自动给表变量名加上了[]括号,当时没觉察有什么问题,按F5 ALTER 存储过程没提示编译错误。在执行该存储过程的时候却出现错误:
消息 208,级别 16,状态 1,过程 test2,第 9 行
对象名 '@TEMP_ID' 无效。
对象名 '@TEMP_ID' 无效。
测试的存储过程如下:
代码
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[test2]
AS
DECLARE @TEMP_ID TABLE
(
[ID] [VARCHAR](18) NOT NULL
PRIMARY KEY
)
BEGIN TRY
SELECT *
FROM [@TEMP_ID]
END TRY
BEGIN CATCH
PRINT '出错了'
END CATCH
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[test2]
AS
DECLARE @TEMP_ID TABLE
(
[ID] [VARCHAR](18) NOT NULL
PRIMARY KEY
)
BEGIN TRY
SELECT *
FROM [@TEMP_ID]
END TRY
BEGIN CATCH
PRINT '出错了'
END CATCH
奇怪的是,在CREATE或者ALTER这个存储过程的时候,SQL Server 没有报错。出现错误,是在执行这个存储过程的时候,而且,这个错误不能被TRY...CATCH块捕获到。究竟是什么原理,不知道院子里的牛人能否解释下?
所以,创建、修改完存储过程,还是试试执行下看有没错误。