テキスト ファイルから何千もの請求書 (およびその他のもの) を取得して、それらを SQL Server 2008 に挿入しようとしています。これを行うための小さなコンソール アプリを作成し、LINQ to SQL を使用します。既存のすべての請求書を挿入した後Invoice_ID
、ID 列と自動インクリメントにしたいので、次のように設計しました。
CREATE TABLE [dbo].[Invoice]
(
[Invoice_ID] int IDENTITY(1,1) NOT NULL PRIMARY KEY,
/* Other fields elided */
)
請求書の挿入を開始する前に、次の行を含むストアド プロシージャを呼び出します。
SET IDENTITY_INSERT [dbo].[Invoice] ON;
/* Other lines for setup elided */
変更を送信した後、次の行で別のストアド プロシージャを呼び出します。
SET IDENTITY_INSERT [dbo].[Invoice] OFF;
/* Other lines for clean up elided */
請求書を挿入して変更を送信しようとすると、次の例外が発生します。
SQLException: IDENTITY_INSERT が OFF に設定されている場合、テーブル 'Invoice' の ID 列に明示的な値を挿入できません。
SQL プロファイラーを実行したところ、挿入を実行しようとする前に実際に設定IDENTITY_INSERT
されていることがわかります。どこON
にも設定されていません。OFF
私は SQL プロファイラーにかなり慣れていないので、これを試してデバッグするための詳細情報を提供してくれる、有効にできるイベントがあるかもしれません。何か案は?
LINQ to SQL で使用される .dbml ファイルの値を微調整してみました。Invoice
テーブルをAuto Generated Value
「False」にAuto-Sync
設定し、「Never」にServer Data Type
設定し、「Int NOT NULL」に設定しました。通常は、それぞれ「True」、「On Insert」、および「Int NOT NULL IDENTITY」に設定しますが、そうすると、SQL Server が実行されていることがわかります。
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [値]
Invoice_ID
私が提供するを挿入するのではなく。