我在使用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。
在查询分析器中运行上述查询,为@@ ROWCOUNT提供了0。那很好。
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"
如果我在批处理文件中有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。
答案 0 :(得分:4)
批处理文件将%
展开为变量。你可以使用双%%
s来逃避它:
WHERE GenericField LIKE '%%@%%.%%'