より多くのSQLスクリプト(それぞれがアプリケーションのバージョンが異なる)があり、すべてのスクリプトを1つのトランザクションで実行したいと考えています。
私はそれをc#から使用して実行しています:
ExecuteNonQuery(command, conn, trans)
にSqlCommand
。
スクリプト内のSQLコマンドは、GO
区切り文字で区切られています。私のC#コードはすべてのスクリプトを反復処理し、セパレーターにSqlCommand
基づいてコレクションを作成します。セパレータは実行から除外されGO
ます。これは、スクリプトファイルの単なる区切り文字です。GO
SqlCommand
すべて正常に機能していましたが、1つの問題が見つかりました。1つのスクリプトに次のコマンドがあります。
ALTER TABLE [dbo].[RoleDataPermissions] WITH NOCHECK ADD CONSTRAINT
[FK_RoleDataPermissions_OrganizationUnits] FOREIGN KEY([OrganizationUnitID])
REFERENCES [OrganizationUnits] ([ID])
別のスクリプト(別のバージョンのアプリではこの制約が削除されました)では、次のようになります。
ALTER TABLE [dbo].[RoleDataPermissions]
DROP CONSTRAINT FK_RoleDataPermissions_OrganizationUnits
最初のコマンドは正常に渡されましたが、2番目のコマンドは例外をスローします。
「FK_RoleDataPermissions_OrganizationUnits」は制約ではありません。制約を削除できませんでした。以前のエラーを参照してください。
私はこの問題の原因を突き止めようとしています。問題は、すべてのコマンドが1つのトランザクションで実行される場合、最初のコマンドがコミットされず、2番目のコマンドがこの制約を見つけることができないことだと思います。分離レベルもに変更しようとしましreaduncommited
たが、役に立ちません。
これにどう対処するか考えていますか?
ありがとう