3

DB でステートメントを実行したい:

/*Disable Constraints & Triggers*/
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'

/*Perform delete operation on all table for cleanup*/
exec sp_MSforeachtable 'SET QUOTED_IDENTIFIER ON; DELETE ?'

/*Enable Constraints & Triggers again*/
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

/*Reset Identity on tables with identity column*/
exec sp_MSforeachtable 'IF OBJECTPROPERTY(OBJECT_ID(''?''), ''TableHasIdentity'') = 1 BEGIN DBCC CHECKIDENT (''?'',RESEED,0) END'

私はLINQデータコンテキストを持っています:

   public static bool ClearDatabase()
      {
          GetContext().ExecuteCommand("");
      }

MSDN のドキュメントで明確ではなかった部分は... 各ステートメントを個別のコマンドとして実行するか、実行するために大きな長い文字列を作成する必要がありますか?

execステートメントも保持する必要がありますか?

また、LINQ を使用してデータベースをクリアするより良い方法を誰かが知っている場合は、お知らせください。

ありがとう

4

1 に答える 1

6

Execute単純に実行します。内部は完全に不透明です ({0}パラメーターを表すために使用される etc は別として - つまり、配列から値が提供された の{0}ようなものになります)。そのため、TSQL が有効である (およびetcが含まれていない) 限り、問題なく動作するはずです。TSQL が長いことは確かに気にしません。しかし:試してみてください。@_p0paramsGO

ただし、個人的には、これをデータ コンテキストから実行するのは危険だと思います。データ コンテキストには状態がキャッシュされている可能性があり、混乱を招く可能性があります。個人的には、ADO.NET から直接 (または「dapper」などのヘルパーを介して) 実行します。しかし、これを行った直後にデータコンテキストを破棄+破棄(およびおそらく再作成)すると、うまくいくと思います。

于 2013-04-23T12:48:54.690 に答える