• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗中...

曾经的程序员。ASP.NET/C#, JavaScript, PL/SQL, T-SQL; 工具: VS2003/2005, Oracle, SQLServer; 偶尔写点CSS, 批处理.
头脑中经常有新想法, 可惜没有去实现.
Never give up.
Never get into a fight with a pig. Both of you will get dirty. But the pig actually enjoys it.
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

SQL Server 存储过程中的表变量名加上'[]'后出现执行错误

SQL Server 存储过程中的表变量名加上'[]'后出现执行错误,该错误在CREATE/ALTER存储过程的时候不会被编译器发现,而且也不会被存储过程中的TRY...CATCH块捕获到

之前工作中编写存储过程(SQL Server 2005),声明了一个表变量,在SELECT ...FROM 表变量名 的时候,按回车插件SQL Prompt 4自动给表变量名加上了[]括号,当时没觉察有什么问题,按F5 ALTER 存储过程没提示编译错误。在执行该存储过程的时候却出现错误:

 

消息 208,级别 16,状态 1,过程 test2,第 9 行
对象名  
'@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


奇怪的是,在CREATE或者ALTER这个存储过程的时候,SQL Server 没有报错。出现错误,是在执行这个存储过程的时候,而且,这个错误不能被TRY...CATCH块捕获到。究竟是什么原理,不知道院子里的牛人能否解释下?

所以,创建、修改完存储过程,还是试试执行下看有没错误。

 

posted on 2009-12-20 13:05  jes  阅读(751)  评论(3)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3