T-SQL中的错误处理

时间:2013-11-16 03:15:32

标签: sql sql-server stored-procedures

我是SQL Server 2008的新手,有疑问要澄清。

我创建了小型存储过程并使用错误处理方法来引发错误。

尝试阻止工作正常但捕获不是。

我创建了一个这样的存储过程:

USE [AdventureWorks2008R2]
GO
CREATE PROCEDURE [dbo].[uspGetpersonName] 
    @BusinessEntityID int 
AS
BEGIN
BEGIN TRY 
    SELECT FirstName, LastName, MiddleName
    FROM Person.Person
    WHERE BusinessEntityID = @BusinessEntityID;
END TRY
BEGIN CATCH
    RAISERROR('There is no record Exixts!!!',16,1) 
END CATCH   
END

在另一个查询构建器中执行存储过程,如下所示:

EXEC dbo.uspGetpersonName 343545

1 个答案:

答案 0 :(得分:5)

从select语句返回零行不是错误。这只是结果。

如果你在你的try块中运行另一个确实抛出错误的语句(通过故意将其除以零SELECT 3/0进行测试),那么你的catch块就会被触发。

你想要的更像是这样:

SELECT FirstName, LastName, MiddleName
FROM Person.Person
WHERE BusinessEntityID = @BusinessEntityID;

IF @@rowcount = 0
 BEGIN
   RAISERROR('There is no record Exixts!!!',16,1)
 END