3

私は VB.NET を使用しています。3 つのフィールドを含む「QUESTION」という DataTable があります。

  • QuestionNumber (一意の整数キー)
  • 質問テキスト
  • 質問の種類

SQL Server データベースで、同じフィールドを持つ「QUESTION」というテーブルを作成しました。QuestionNumber は整数の一意のキーとして定義され、自動インクリメント

ここで、DataTable を SQL Server に挿入するために一括コピーを作成すると、データベースは DataTable から QuestionNumber を上書きし、新しいものを生成します (1 インクリメント 1 から開始)。

元の QuestionNumbers がデータベースにコピーされるように、データベースの設定を変更するにはどうすればよいですか?

4

3 に答える 3

3

IDENTITY INSERT を参照してください。あなたはそれをオンにします。テーブルを更新してから、オフに戻します。

SET IDENTITY_INSERT table ON

一度に1つのテーブルにしか装着できないことに注意してください。別のテーブルでオンにすると、最後のテーブルでオフになります。

既存の最大値よりも大きい値を挿入すると、その値に再シードされるため、すべての新しい値が大きくなります。

繰り返しますが、オフにすることを忘れないでください。

SET IDENTITY_INSERT table OFF

文字通り BULK INSERT を実行している場合は、サーバーに ID 値を無視しないように指示する KEEPIDENTITY 修飾子を忘れないでください。そうしないと、ID 値が無視され、ID 列に新しい値が生成されます。

データの一括インポート時の ID 値の保持

于 2010-03-18T14:10:52.340 に答える
2

挿入だけを使用する場合:

SET IDENTITY_INSERT [your table] ON
INSERT INTO [your table] (identityCol, col1,...) VALUES (identityCol, col1,...)
SET IDENTITY_INSERT [your table] OFF

データを一括コピーするときに、コマンドに特別なパラメーター/スイッチ/ヒントを追加する必要があります。詳細は次のとおりです。

データの一括インポート時の ID 値の保持

于 2010-03-18T14:11:39.203 に答える
0

OK、これが私の問題を解決したコードです。マーカスとKMに感謝します!

' set identity_insert to on to insert tables with key'
        Command = New SqlCommand("SET IDENTITY_INSERT table ON", con)
        Command.ExecuteNonQuery()


'Copy dataTable into MSSQL database'
 Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(cn, SqlBulkCopyOptions.KeepIdentity)
            bulkCopy.DestinationTableName = dTable.TableName
            Try
                bulkCopy.WriteToServer(dTable)
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Using

        'disable identity_insert'
        Command = New SqlCommand("SET IDENTITY_INSERT table OFF", con)
        Command.ExecuteNonQuery()
于 2010-03-18T15:51:58.477 に答える