这是我的插入存储过程:
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
答案 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