-1

我在使用 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,我希望更新语句返回 0 的 @@ROWCOUNT。

  • 示例 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 语句,我会得到一个 @@ROWCOUNT 的2

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?为什么我会突然得到 2 而不是 0 的 @@ROWCOUNT?

第一次运行该脚本时,我得到了一个为 5 的 @@ROWCOUNT,当时只更新了三个记录。

4

1 回答 1

4

批处理文件扩展%为变量。您可以使用 double %%s 来转义它:

WHERE GenericField LIKE '%%@%%.%%' 
于 2010-07-06T20:27:14.673 回答