私は非常に簡単な質問があります(そしてこれらは通常、私の髪を引き裂くのにほとんどの時間を費やすものです)。バッチファイルを使用して、バッチと同じディレクトリにあるすべての.sqlクエリを実行し、そのすべての結果をさまざまな.csvファイルに保存しています。
これが私のコードです:
@echo off
REM Check that all parameters are present
@IF "%1"=="" goto error
@IF "%2"=="" goto error
@IF "%3"=="" goto error
@IF "%4"=="" goto error
REM For every *.sql file in this folder "." and all its subfolders (/R), do the following:
@for /R "." %%F in (*.sql) do (
REM Print the command to be executed:
@echo Database : @SqlCmd -S %1 -U %2 -P %3 -d %4 -I -l60 -i "%%F" -o "%%F.output.csv" -h-1 -s"," -w 1000 -W
REM Execute the command:
@SqlCmd -S %1 -U %2 -P %3 -d %4 -I -l60 -i "%%F" -o "%%F.output.csv" -h-1 -s"," -w 1000 -W
)
goto :EOF
:error
@echo Incorrect syntax :
@echo extract.cmd [servername] [user id] [password] [databasename]
@echo
@pause
goto :EOF
テストとして、次のクエリを実行します。
select top(10) [name] from sysobjects
出力:
sysrscols
sysrowsets
sysallocunits
sysfiles1
syspriorities
sysfgfrag
sysphfg
sysprufiles
sysftinds
sysowners
(10 rows affected)
これは、2つのことを除いて、正常に機能します。まず、列ヘッダーも出力する必要があります。そこで、「-h -1」パラメータを削除すると、次のようになります。
name
----
sysrscols
sysrowsets
sysallocunits
sysfiles1
syspriorities
sysfgfrag
sysphfg
sysprufiles
sysftinds
sysowners
(10 rows affected)
これは、見出しとデータの最初の行の間に水平方向のルール「------」が必要ないという事実を除いて、すばらしいことです。
また、「(10行が影響を受ける)」行を出力したくありません。
誰かが私がこれを達成する方法を知っていますか?
ありがとう
カール