OLE DB を使用して複数のコマンドまたは SQL スクリプトを実行することは可能ですか? たとえば、SQL スクリプトを実行してデータベースとその構造 (テーブル、インデックス、ストアド プロシージャなど) を作成します。
CCommand クラスを使用すると、1 つのコマンドしか実行できません。複数のコマンドで SQL スクリプトを実行するにはどうすればよいですか?
ありがとう、マーティン
OLE DB を使用して複数のコマンドまたは SQL スクリプトを実行することは可能ですか? たとえば、SQL スクリプトを実行してデータベースとその構造 (テーブル、インデックス、ストアド プロシージャなど) を作成します。
CCommand クラスを使用すると、1 つのコマンドしか実行できません。複数のコマンドで SQL スクリプトを実行するにはどうすればよいですか?
ありがとう、マーティン
TSQL ステートメントを区切る GO コマンドは SQL コマンドではなく、フロント エンドのみで認識されるステートメントです。
したがって、コマンド オブジェクトに結果を渡す前に、「\nGO」でスクリプトを複数のコマンドに明示的に分割する必要があります。
マーティン - これと同じ問題がありました。1 つ以上の「go」を含むスクリプトをロードすると、エラーが発生すると思いますか?
過去にSQL DMOを使用して、GOを含むスクリプトを実行しました。そのためには、ターゲット コンピュータに SQLDMO をインストールする必要があります。
もう 1 つのオプションは、.NET の "String.Split("GO")" 関数を使用して、結果の文字列の配列をループし、それらを 1 つずつ実行することです。
このような:
StreamReader file = File.OpenText("c:\\MyScript.sql");
SqlConnection conn = new SqlConnection("My connection string here...");
string fullCommand = file.ReadToEnd();
string[] splitOptions = new string[] {"go", "GO", "gO", "Go" };
foreach (string individualCommand in fullCommand.Split(splitOptions, StringSplitOptions.RemoveEmptyEntries))
{
SqlCommand comm = new SqlCommand(individualCommand, conn);
comm.ExecuteNonQuery();
}
免責事項: 私は上記のコードをテストしていませんが、何が必要かを理解できるはずです :-)
INSERT INTO;INSERT INTO のような複数のステートメントを送信しました (SQL Server ではセミコロンは必要ありません。
一部のステートメント (CREATE FUNCTION など) は、「バッチ」の最初のステートメントでなければなりません。SSMS と sqlcmd には、バッチを分離するためのクライアント側ツールである GO セパレーターがあります。これは OLEDB の機能ではないため、個別に送信する必要があります (操作を同時に実行できるかどうかに応じて、順次または並列で別の呼び出しを行います)。
CCommand から逃れることができれば、GO バッチ区切りをサポートしているため、sqlcmd を起動できると思います。