zoukankan      html  css  js  c++  java
  • @@ERROR 和 @@ROWCOUNT

    @@ERROR和@@ROWCOUNT

    1. 1.         @ERROR

    当前一个语句遇到错误,则返回错误号,否则返回0。需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量中以备将来使用。具体的分析请看下面的代码,一目了然。 

    Update AF_CarInfo SET CarInfoID = 19 Where OilCost = 13 --执行后@@ERROR为547 

    PRINT @@ERROR --执行后@@ERROR为0

    IF @@ERROR = 0

    BEGIN

        PRINT @@ERROR

    END

    -----------------------------------------------------------------

    消息547,级别16,状态0,第1 行

    Update 语句与REFERENCE 约束"FK_AF_MILEE_REFERENCE_AF_CARIN"冲突。该冲突发生于数据库"Lymit_PrintERP",表"dbo.AF_MileEnrol", column 'CarInfoID'。

    语句已终止。

    547

    0

    分析:上面的更新SQL语句导致主外键冲突,抛出错误信息,所以在执行Update语句后的@@Error数值是547,但是在执行第一个Print @Error语句输出错误信息之后,注意,此时@@Error的数据立即变成了0!,这一点非常重要,因为@@Error在每一条语句执行后立刻被重置!同样的道理,执行IF @@ERROR = 0语句后@@ERROR的数值仍然是0,因为这句话也没有发生错误!

    1. 2.         @@ROWCOUNT

    返回上一语句受影响的行数!和@ERROR一样的特性,在每一条语句执行后都将被重置,如果将来使用需要将变量保存到局部变量中。任何不返回的语句都将这个变量置为0!比如经常使用的IF语句。废话少说,上代码!

    DECLARE @RowCountVar INT

    Update AF_CarOil SET OilType = '五号汽油'--执行后@@ROWCOUNT为2

    SET @RowCountVar = @@ROWCOUNT --执行后@@ROWCOUNT为1

    IF @@ROWCOUNT = 1  --执行后@@ROWCOUNT为0

    BEGIN

        PRINT '影响的行数为1'

    PRINT @@ROWCOUNT

    END

    IF @RowCountVar <> 0

    BEGIN

        PRINT '受影响的行数为:' + STR(@RowCountVar)

    END

    -----------------------------------------------------------------

     

    (2 行受影响)

    影响的行数为 1

    0

    受影响的行数为:        2

        分析:上面的代码中在执行Update语句之后,受影响的行数为2行,然后将受影响的行数保存到事先声明的局部变量中,赋值语句实际上影响的行数为1行,在下面的IF语句中进行了跳转,这个地方是关键,这并不是Update语句受影响的行数是1,而是将@@ROWCOUNT将的赋给局部变量的过程中变成了1。在执行后IF @@ROWCOUNT = 1的判断之后@@ROWCOUNT的数值重新被赋值为了0!

        总结:@@ROWCOUNT和@@ERROR变量的值,在执行完一条语句后总是会发生变化,所以我们将他们作为判断的依据的时候应该首先保存在局部变量中。他们反映的都是紧接着的上一条语句对他们的影响!

  • 相关阅读:
    C# 操作配置文件
    C# Excel操作类
    没有找到 mspdb100.dll 的解决办法
    工厂方法模式
    .Net互操作2
    The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
    手机抓包xcode自带命令行工具配合wireshark实现
    expecting SSH2_MSG_KEX_ECDH_REPLY ssh_dispatch_run_fatal问题解决
    使用ssh-keygen设置ssh无密码登录
    远程复制文件到服务器
  • 原文地址:https://www.cnblogs.com/zhangq723/p/2103219.html
Copyright © 2011-2022 走看看