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ステートメントは@@ROWCOUNT0を返すと思います。
- 例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のようにスイッチを間違って設定していませんか?@@ ROWCOUNTが0ではなく2になるのはなぜですか?
スクリプトを初めて実行したとき、更新されたレコードが3つだけのときに、@@ROWCOUNTが5になりました。