バッチ ファイルを使用して実行する必要があるスクリプトがあります。バッチ ファイルで SQLCMD を使用してスクリプトを実行しますか? また、スクリプトはデータベース内のテーブルにデータを挿入します。バッチ ファイルで SQLCMD をどのようにフォーマットすれば、どのデータベースで動作すると思われるかがわかりますか?
3 に答える
まず、クエリを sql テキスト ファイル (.sql 拡張子を持つテキスト ファイル) に保存します。使用するデータベースをサーバーに伝える USE ステートメントを先頭に追加してください。MSDN の例を使用します。
USE AdventureWorks2008R2;
GO
SELECT p.FirstName + ' ' + p.LastName AS 'Employee Name',
a.AddressLine1, a.AddressLine2 , a.City, a.PostalCode
FROM Person.Person AS p
INNER JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress bea
ON bea.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.Address AS a
ON a.AddressID = bea.AddressID;
GO
次に、バッチ ファイルで SQLCMD を実行し、SQL ファイル (パス付き) をパラメーターとして渡します。
sqlcmd -S myServer\instanceName -i C:\myScript.sql
認証も必要な場合は、SQLCMD コマンドに -U および -P パラメーターを追加する必要があります。
sqlcmd ユーティリティの詳細については、MSDN の記事を参照してください。
スイッチを使用して-S
サーバー名とインスタンス名を指定します。-S MyDbServer\Database1
SQLCMD
ドキュメントはこちらにあります。
複数のデータベースに対してすべての .sql ファイル (フォルダー内の複数の sql スクリプト) を実行する場合は、以下の内容のバッチ ファイル「RunScript-All.bat」を作成します。
echo "======Start - Running scripts for master database======="
Call RunScript-master.bat
echo "=======End - Running scripts for master database=========="
pause
echo "=====Start - Running scripts for model database========"
Call RunScript-model.bat
echo "=======End - Running scripts for master database=========="
pause
特定のデータベース、つまり「RunScript-master.bat」の個々のバッチ ファイルの定義は、次のように記述できます。
for %%G in (*.sql) do sqlcmd /S .\SQL2014 /U sa /P XXXXXXXXX /d master -i"%%G"
::pause
異なるデータベース用に多くのファイルを作成し、「RunScript-All.bat」から呼び出します。
これで、「RunScript-All.bat」バッチ ファイルをクリックして、多くのデータベースですべての SQL スクリプトを実行できるようになります。