1

クエリ エディターから SQLCMD を使用して、いくつかの基本的なスクリプトを作成しようとしています。

同じ sql ステートメントを実行したかったのですが、異なる sql サーバーで出力を確認したかったのです。これはパフォーマンスとは関係ありませんが、移行したさまざまなサーバーのデータをチェックするだけです。ここでSQLCMDが非常に役立つことを知りましたが、これをどのようにスクリプト化するのだろうか. すべてのサーバーに同じデータベースとテーブルが存在すると仮定してください。これまでのところ、必要なものを取得するために以下を実行していますが、これはもっとうまくできると確信しています!

:Connect Server1
SELECT count (*) FROM [DB].[dbo].[Table1]
SELECT count (*) FROM [DB].[dbo].[Table2]

:Connect Server2
SELECT count (*) FROM [DB].[dbo].[Table1]
SELECT count (*) FROM [DB].[dbo].[Table2]

:Connect Server3
SELECT count (*) FROM [DB].[dbo].[Table1]
SELECT count (*) FROM [DB].[dbo].[Table2]

ありがとうございました !

4

2 に答える 2

1

2 つの異なるデータベースを比較するのに役立つSchemaCrawlerというプロジェクトがあります。バッチファイルを使用してスクリプトを作成したところ、うまく機能しました。

しかし、バッチから MSSQL クエリを実行する最良の方法は次のようなものです。これは、行継続のためのキャロット文字の使用、変数の遅延展開、ファイルへの SQL 結果の出力、およびファイルからの変数の読み取りを示しています。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
:: batch file for sql query
SET HOST=qa071.xyz.com
SET FIELDVAL=PRE%%
SET DBNAME=MYDB
SET USER=username
SET PASS=Passw3rd1

:: Do query
SET SQLSTRING=SELECT PARM_ID, PARM_NAME, PARM_VALUE^
 FROM CONFIG^
 WHERE PARM_NAME LIKE '%FIELDVAL%'
ECHO !SQLSTRING!
ECHO.
ECHO sqlcmd.exe -b -S !HOST! -d !DBNAME! -Q "!SQLSTRING!" -W -U !USER! -P !PASS!
sqlcmd.exe -b -S !HOST! -d !DBNAME! -Q "!SQLSTRING!" -W -U !USER! -P !PASS!

:: Count results and display count
SET SQLSTRING=SELECT COUNT(*)^
 FROM TB_CONFIG^
 WHERE PARM_NAME LIKE '%FIELDVAL%'
ECHO !SQLSTRING!
ECHO.
ECHO sqlcmd.exe -b -S !HOST! -d !DBNAME! -Q "!SQLSTRING!" -W -U !USER! -P !PASS! -h -1
sqlcmd.exe -b -S !HOST! -d !DBNAME! -Q "!SQLSTRING!" -W -U !USER!^
 -P !PASS! -h -1> count.txt
SET /P THECOUNT=<count.txt
ECHO The count is: %THECOUNT%
ECHO.
DEL /Q count.txt

ECHO Query is done. Hit any key to close this window....
pause>nul
于 2013-06-04T16:19:00.693 に答える