0

私は C# winform アプリケーションを使用しており、SQl サーバーを使用してこのコードを持っています。

SqlCommand comm;
comm.CommandText = "alter table anyTable add someColumn int null";
comm.ExecuteNonQuery();

このコード セクションをデバッグするとき、comm.ExecuteNonQuery(); の直後に、SQL サーバー管理に移動し、関連するテーブルで "select *" を実行して変更を確認します。

問題は、このテーブル、SQL サーバーの「クエリを実行中」に長時間アクセスできず、接続が更新されるまでアクセスできないことですが、別のテーブルにアクセスできます。

この問題は常に存在するとは限らず、なぜ発生するのかわかりません。

ご協力ありがとうございました!!!

4

3 に答える 3

2

ターゲット テーブルは、ALTER TABLE ステートメントが完全に完了するまでロックされます。整合性を維持するために、データベースはそのテーブルへのアクセスを防止する必要があります。

于 2013-03-06T12:09:48.923 に答える
0

初期テーブルをキーで参照する追加のテーブルを作成した方がよいのではないでしょうか?

CREATE Original(id int, value1 int PRIMARY KEY(Id))
CREATE Secondary(OriginalId int, ColumnName VARCHAR(50), value INT PRIMARY KEY(OriginalId, ColumnName))

ALTER TABLE Secondary  ADD  CONSTRAINT [FK_Secondary_Original] FOREIGN KEY([OriginalId] )
REFERENCES Original ([Id])
ON DELETE CASCADE

この場合、セカンダリ テーブルに単純な INSERT を実行するだけで、元の行のコンテンツ ランタイムを行単位で拡張できます。

于 2013-03-06T13:35:24.923 に答える
0

ご協力ありがとうございました。

SQL スクリプトの 1 つで開いているトランザクションがありました...

于 2013-03-19T07:58:26.700 に答える