我是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
答案 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