SQL中的@@ ROWCOUNT返回与SQL不同的结果

时间:2010-07-06 20:11:43

标签: sql-server tsql osql

我在使用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:

Test.Sql包含与上面完全相同的SQL语句。如果我使用以下OSQL语句,那么@@ ROWCOUNT也会得到0:

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

如果我在批处理文件中有SQL语句而不是SQL文件,我会得到 2 的@@ 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?

我第一次运行脚本时,只有三条记录被更新时,我得到了@@ ROWCOUNT为5。

1 个答案:

答案 0 :(得分:4)

批处理文件将%展开为变量。你可以使用双%% s来逃避它:

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