Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程赢得';不要返回任何错误消息或错误号码_Sql_Sql Server_Tsql_Stored Procedures_Error Handling - Fatal编程技术网

Sql 存储过程赢得';不要返回任何错误消息或错误号码

Sql 存储过程赢得';不要返回任何错误消息或错误号码,sql,sql-server,tsql,stored-procedures,error-handling,Sql,Sql Server,Tsql,Stored Procedures,Error Handling,以下是我的insert存储过程: 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 Detaile

以下是我的insert存储过程:

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
时,它不会显示任何错误,只会将该行保存到表中。你能帮我如何处理错误,如何知道号码和错误信息吗

谢谢大家!!
1234567875354654645654651541255435.4153241653535464654645654651541255435.415324165636524165135

您插入的查询应该是错误的。请尝试此操作

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 

问题是
sqlserver
隐式地将整数值转换为
varchar
值。所以500被铸造成“500”。如果要验证,应在存储过程中进行验证:

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

如果名称包含除
a--z,a--z',

以外的符号,则会引发错误。您似乎忘记了包含相关的存储过程文本。CREATE proc dbo.spa将AName nvarchar(50)插入为BEGIN BEGIN尝试DECLARE DetailedError VARCHAR(MAX);插入(AName)值(AName)END TRY BEGIN CATCH SELECT DetailedError=CAST(错误号()为VARCHAR)+':'+错误消息()+':'+CAST(错误号()为VARCHAR);结束捕获结束您的问题,并在突出显示代码时使用
{}
按钮。请不要将代码示例或示例数据放入注释中-因为您无法格式化它,所以阅读它非常困难。。。。取而代之的是:通过编辑你的问题来更新它,以提供额外的信息!谢谢。它只是隐式地将500转换为“500”,所以,当我尝试执行它时:exec spainsert 500(而不是名称),它会将该行保存到表中,并且不会返回任何SQL错误消息,例如:您输入了错误的数据类型,@AName不需要int,或者我不知道。如何避免这种情况,我的意思是如何限制它,只将名称(字母)保存到数据库中,而不保存数字或其他东西。是否发生了@A_Name是nvarchar(50)而应该是varchar(50)?关键字和表名是正确的,我使用空格或下划线,因为STACKOVERFLOW编辑器不允许我发布这个问题,所以我删除了“@”符号并分解了一些单词谢谢!你能帮助我如何处理错误吗?如果出现错误,如何向用户输出号码和错误消息?!示例:无效数据、无效数据类型、约束条件、外键、主键不存在etcIf它对给定投票有帮助。更多详细信息请参考此链接。谢谢!你能帮助我如何处理错误吗?如果出现错误,如何向用户输出号码和错误消息?!示例:无效数据、无效数据类型、约束、外键、主键不存在等@chova,您已经实现了一些正确的错误处理。你对此有什么问题吗?是的,spainsert需要一个名称参数,当我执行exec spainsert'test'->时,它保存该行,当我执行exec spainsert 5000->时,它也保存该行,但它不正常,因为它是一个数字,所以我想在输出中获得每个错误的数字和消息@切娃,你试过我的说法吗?当你将500传递给你的进程时,它不会抛出错误吗??