T-SQL中的错误处理

Mah*_*aha 1 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
Run Code Online (Sandbox Code Playgroud)

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

EXEC dbo.uspGetpersonName 343545
Run Code Online (Sandbox Code Playgroud)

Bil*_*urt 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
Run Code Online (Sandbox Code Playgroud)