2010-07-06 57 views
-1

我遇到一些奇怪的行爲與OSQL,並將不勝感激任何幫助。@@ ROWCOUNT在OSQL返回不同的結果比在TSQL

我有一個批處理文件,將數據庫字段從一列複製到另一個。下面是一個示例腳本:

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的字段是NOT NULL了,我希望更新語句返回0。

  • 例1的@@ ROWCOUNT:

在查詢分析器中運行上述查詢爲@@ 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:

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?

第一次運行腳本時,我得到了@@ ROWCOUNT爲5,當時只有三條記錄被更新。

回答

4

批處理文件將%擴展爲變量。你可以通過使用雙重%%來逃避它:

WHERE GenericField LIKE '%%@%%.%%' 
+0

輝煌,就是這樣!我顯然沒有想到這一點。再次感謝! – LittleBobbyTables 2010-07-06 20:34:55