存储过程不会返回任何错误消息或编号

时间:2015-06-29 10:53:17

标签: sql sql-server tsql stored-procedures error-handling

这是我的插入存储过程:

CREATE PROCEDURE spainsert 
    @A_Name nvarchar(50) 
AS BEGIN 
   BEGIN TRY
      DECLARE Detailed_Error VAR_CHAR(MAX); 

      Insert into A(A_Name) 
      values(A_Name) 
   END TRY 
   BEGIN CATCH
       SELECT 
          Detailed_Error = CAST(ERROR_NUMBER() AS VAR_CHAR ) + ' : '+ ERROR_MESSAGE() + ' : ' + CAST(ERROR_LINE() AS VAR_CHAR );
   END CATCH 
END 

当我尝试输入NUMBER而不是NAME:exec spa insert 500时,它不会显示任何错误,只是将该行保存到表格中。你能帮我解决一下如何处理错误,如何知道数字和错误信息吗?!

谢谢大家! 123456787523535464654645654651541541255435.4153241653241636524165324135

2 个答案:

答案 0 :(得分:1)

事物是Sql Server隐式地将整数值强制转换为varchar值。因此500被投射到500'。如果要验证,则应在存储过程中进行验证:

IF @A_Name LIKE '%[^a-z ]%'
   RAISERROR('Name contains some incorrect symbols', 16, 1)

如果name包含a--z, A--Z, ' '以外的符号,则会抛出错误。

答案 1 :(得分:0)

你插入查询应该是错误的。试试这个

CREATE PROCEDURE spainsert 
    @A_Name nvarchar(50) 
AS BEGIN 
   BEGIN TRY

      Insert into A(A_Name) 
      values(@A_Name) 
   END TRY 
   BEGIN CATCH
       SELECT 
           CAST(ERROR_NUMBER() AS VAR_CHAR ) + ' : '+ ERROR_MESSAGE() + ' : ' + CAST(ERROR_LINE() AS VAR_CHAR )
   END CATCH 
END