Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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/3/heroku/2.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 server 2005 SQL 2005 try/catch块从未达到“catch”despte伪数据测试_Sql Server 2005_Try Catch - Fatal编程技术网

Sql server 2005 SQL 2005 try/catch块从未达到“catch”despte伪数据测试

Sql server 2005 SQL 2005 try/catch块从未达到“catch”despte伪数据测试,sql-server-2005,try-catch,Sql Server 2005,Try Catch,好的,我对SQL 2005错误处理和am不是很有经验 学习如何处理try/catch语句 我已经写了下面的程序,但不管我传递给它什么, 我的ErrorLog表中从来没有任何数据。我通过了所有考试 不在数据库中的值、所有日期时间值或数据字符串 并获取“0行生效”,错误日志中未报告任何内容。它是 就好像从来没有达到CATCH语句的价值一样,我 我们也尝试在顶部对验证进行注释 你知道我做错了什么吗?谢谢 ALTER PROCEDURE [dbo].[aspnet_Membership_UpdateLa

好的,我对SQL 2005错误处理和am不是很有经验 学习如何处理try/catch语句

我已经写了下面的程序,但不管我传递给它什么, 我的ErrorLog表中从来没有任何数据。我通过了所有考试 不在数据库中的值、所有日期时间值或数据字符串 并获取“0行生效”,错误日志中未报告任何内容。它是 就好像从来没有达到CATCH语句的价值一样,我 我们也尝试在顶部对验证进行注释

你知道我做错了什么吗?谢谢

ALTER PROCEDURE [dbo].[aspnet_Membership_UpdateLastActivityDate]   

@UserId nvarchar(256),
@UserName nvarchar(256),
@LastActivityDate datetime,
@ApplicationName nvarchar(256)

AS

DECLARE @Today DATETIME
DECLARE @MSG VARCHAR(255)
DECLARE @Severity INT
DECLARE @ErrorCode INT

BEGIN

SET XACT_ABORT ON   -- (I have also tried it without XACT_ABORT. No difference)

BEGIN TRY

    SET @ErrorCode = 0
    SELECT @Today = GetDate()

    IF (@UserId IS NULL)
    RETURN(1)

    IF (@UserName IS NULL)
    RETURN(1)

    IF (@LastActivityDate IS NULL)
    RETURN(1)

    BEGIN TRAN
        UPDATE dbo.aspnet_Users WITH (ROWLOCK)
        SET LastActivityDate = @LastActivityDate
        FROM dbo.aspnet_Users u
        INNER JOIN dbo.aspnet_Applications a
        ON u.ApplicationId = a.ApplicationId
        WHERE u.UserName = @UserName
        AND u.UserId = @UserId
        AND a.ApplicationName = @ApplicationName
    COMMIT TRAN

END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
        ROLLBACK TRAN   

    SET @ErrorCode = Error_Number()
    SET @Severity = Error_Severity()
    SET @MSG = 'An error was thrown: '
        + 'Error(' + @ErrorCode + '):' + ERROR_MESSAGE()
        + ' Severity = ' + ERROR_SEVERITY() 
        + ' State = ' + ERROR_STATE()
        + ' Procedure = ' + ERROR_PROCEDURE()
        + ' Line Number = ' + ERROR_LINE()

    INSERT INTO [dbo].[ErrorLog]([errornum], [errortype], [errormsg],[errorsource], [errordate])
    VALUES (@ErrorCode, 'E', @MSG, Error_Procedure(), @Today)

    RAISERROR(@MSG, @Severity, 2)

END CATCH

END

RETURN @ErrorCode

我在SQL错误处理方面做了很多工作已经有一段时间了,但我看不到任何可能产生错误的地方。您是否希望捕获返回语句?这是不会发生的…他们只会从函数返回。您需要引发错误,而不是触发返回。

我在SQL错误处理方面做了很多工作,但我没有看到任何可能产生错误的地方。您是否希望捕获返回语句?这是不会发生的…他们只会从函数返回。您需要提出错误,而不是触发返回。

同意@Mark。尝试更改此选项:

IF (@UserId IS NULL)
    RETURN(1)
为此:

IF (@UserId IS NULL)
BEGIN
    RAISERROR('No UserID was passed in.', 11, 1);
    RETURN 1;
END
另请参阅本文,以了解Erland Sommarskog编写的一本极好的错误处理入门读物:


同意@Mark。尝试更改此选项:

IF (@UserId IS NULL)
    RETURN(1)
为此:

IF (@UserId IS NULL)
BEGIN
    RAISERROR('No UserID was passed in.', 11, 1);
    RETURN 1;
END
另请参阅本文,以了解Erland Sommarskog编写的一本极好的错误处理入门读物:


换句话说:捕获不是最终的。回答得不错,+1。这是真的@Aaronaught。T-SQL中的错误处理还远未完成,但它们正在取得进展,我希望在下一个完整版本的SQL Server中看到一些不错的工作项目,例如2008 R2之后。感谢您的帮助。似乎我混淆了过程性select语句错误检查,例如,当一个语句返回null并带有try-catch块错误时,表就不存在了。谢谢你为我澄清这一点。这就是所谓的一切-换句话说:捕获不是最终的。回答得不错,+1。这是真的@Aaronaught。T-SQL中的错误处理还远未完成,但它们正在取得进展,我希望在下一个完整版本的SQL Server中看到一些不错的工作项目,例如2008 R2之后。感谢您的帮助。似乎我混淆了过程性select语句错误检查,例如,当一个语句返回null并带有try-catch块错误时,表就不存在了。谢谢你为我澄清这一点。这就是所谓的一切-谢谢,夏尔巴密码,选择我的答案作为答案。谢谢,夏尔巴密码,选择我的答案作为答案。谢谢Erland的链接Aaron。这非常有帮助。既然没有“协助”选项,我就投票给你。再次感谢!感谢Erland的链接Aaron。这非常有帮助。既然没有“协助”选项,我就投票给你。再次感谢!