2017-05-25 9 views
1

私は、行単位でステップ実行したときと同じように動作するSQLスクリプトを用意しています。最初は、これは実行可能なオプションでしたが、スクリプトは時間の経過と共に大きくなり、それをステップ実行することは今や面倒です。複数のステートメントタイプを使用したSQLスクリプトの自動化

私はVisual StudioでSSISパッケージの一部としてスクリプトを実行しようとしましたが、それは私に奇妙な結果をもたらしました。

私はスクリプトに複数の言語(つまり、複数のUPDATE、ALTER、SELECT INTO、ステートメント)が混在していると感じています... このスクリプトを自動化する方法はありますか?もし私がそれを踏んでいたら?

種類です。そしてありがとう!

+1

次のブロックに移動する前に、DDLの変更をコミットする必要があります。私はSQL ServerがGOを使うと思います。 https://stackoverflow.com/questions/1432757/sql-server-script-alter-procedure-executing-multiple-alter-procedure-into-oneが役立ちます。 GOは最後の "GO"からすべての文を実行します。したがって、DDLを変更する場合は、変更を有効にする次の一連のトランザクションの前に更新を行うことができます。 – xQbert

+0

デバッグ用ですか?なぜスクリプトを複数のパッケージ/複数のストアドプロシージャに分割しないのですか? – Alexei

+0

@Alexei理想的には私はこれを自動的に実行するために展開したいと思います。私はビジュアルスタジオに転送したときにスクリプトを複数のパッケージに分割しようとしましたが、スクリプトを書いた線形のために、それは私に望ましい結果を与えませんでした。 – hansolo

答えて

2

一般的に言えば、必要なのは、各ステートメントの後にセミコロンだけが必要です。これはステートメントタイプに関係なくです。 "Go"は、コードをバッチに分割したい場合にのみ必要です(ただし、コードを他のもの、つまりADO.NETコマンドオブジェクトに渡す場合は機能しません)。これは、 "go"の前にコードの成功または失敗に関係なくコードを実行し続ける場合に役立ちます。コードの継続を前のコードに依存させたい場合は、各ステートメントを必ず ";"で終わらせてください。

+0

それはありがとうございます。どのように悪い習慣が規模で問題になるかの素晴らしい例。なぜそれがこのような長い時間を取っているのか?それは、スクリプトを手動でステップするのに2時間かかりませんでした... – hansolo

+0

まだ運がありません。スクリプトの一部は正常に実行されますが、多くのUPDATEステートメントは決して発生せず、結果としてデータのない列が作成されます。 – hansolo

+0

各文のSQLスクリプトタスクでSSISジョブとして設定しようとしましたか?または、データフロータスクで設定できますか?これらの両方を使用すると、問題に取り組んでいる場所を少しでも見やすくすることができます。実行した後、出力を見て、エラーまたは警告メッセージを探します。 –

関連する問題