代码之家  ›  专栏  ›  技术社区  ›  LittleBobbyTables - Au Revoir

@@OSQL中的ROWCOUNT返回的结果与TSQL中的不同

  •  -1
  • LittleBobbyTables - Au Revoir  · 技术社区  · 14 年前

    我在OSQL中遇到了一些奇怪的行为,如果有任何帮助,我将不胜感激。

    我有一个批处理文件,可以将数据库字段从一列复制到另一列。下面是一个示例脚本:

    SET NOCOUNT ON; 
    UPDATE Table1 SET Table1.EmailAddress = Table2.GenericField FROM Table1
    INNER JOIN Table2 ON Table1.ID = Table2.ID WHERE GenericField LIKE '%@%.%' 
       AND EmailAddress IS NULL;
    SELECT @@ROWCOUNT;
    

    假设所有的EmailAddress字段都不再为NULL,我希望update语句返回的@@ROWCOUNT为0。

    • 例1:

    在“查询分析器”中运行上述查询时,得到的@@ROWCOUNT为0。那很好。

    • 例2:

    Sql包含与上面完全相同的Sql语句。如果使用以下OSQL语句,则@@ROWCOUNT也会得到一个0:

    osql.exe -D TestConn -U UserID -P pwd -s , -h-1 -w 100 -n ^
        -i "C:\Scripts\Test.sql"
    

    如果批处理文件中有SQL语句而不是SQL文件,则会得到@@ROWCOUNT :

    osql.exe -D TestConn -U UserID -P pwd -s , -h-1 -w 100 -n -Q ^
      "SET NOCOUNT ON; 
       UPDATE Table1 SET Table1.EmailAddress = Table2.GenericField FROM Table1
       INNER JOIN Table2 ON Table1.ID = Table2.ID WHERE GenericField LIKE '%@%.%' 
          AND EmailAddress IS NULL;
       SELECT @@ROWCOUNT;" 
    

    我是否有一个开关设置错误例如3?为什么我会突然得到@@ROWCOUNT为2而不是0?

    第一次运行脚本时,我的@行数为5,当时只更新了三条记录。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Andomar    14 年前

    批处理文件展开 % 一个变量。你可以通过使用double来逃脱它 %%

    WHERE GenericField LIKE '%%@%%.%%'