54

Equipment1つのデータベースMyDBQAからテストデータベースにテーブルをコピーしたいと思いますMyDB。テーブルには、主キー(nullではなくint)であるID列があります。

しかし、エラーが発生しました:

メッセージ8101、レベル16、状態1、行2
テーブル'MyDB.dbo.Equipment'のID列の明示的な値は、列リストが使用され、IDENTITY_INSERTがONの場合にのみ指定できます。

私のスクリプト:

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON
INSERT INTO [MyDB].[dbo].[Equipment]  SELECT * FROM [MyDBQA].[dbo].[Equipment]
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF
4

4 に答える 4

106

メッセージにあるように、列リストが欠落している可能性があります

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON

INSERT INTO [MyDB].[dbo].[Equipment]
            (COL1,
             COL2)
SELECT COL1,
       COL2
FROM   [MyDBQA].[dbo].[Equipment]

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF 
于 2012-08-17T12:56:50.033 に答える
18

エラーメッセージの関連部分は次のとおりです。

...when a column list is used...

列リストを使用しておらず、を使用していますSELECT *。代わりに列リストを使用してください。

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON 

INSERT INTO [MyDB].[dbo].[Equipment] (Col1, Col2, ...)
SELECT Col1, Col2, ... FROM [MyDBQA].[dbo].[Equipment] 

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF 
于 2012-08-17T12:57:56.720 に答える
3

VBコードでは、クエリを送信しようとすると、INSERT次のように同じ「executenonquery」でdoubleクエリを送信する必要があります。

sqlQuery = "SET IDENTITY_INSERT dbo.TheTable ON; INSERT INTO dbo.TheTable (Col1, COl2) VALUES (Val1, Val2); SET IDENTITY_INSERT dbo.TheTable OFF;"

;GOの代わりにセパレーターを使用しました。

私のために働きます。遅くても効率的!

于 2014-11-19T23:56:21.593 に答える
1

これは、SET IDENTITY_INSERTの使用に関するMicrosoftの記事です。これは、私のように、元のID列の値を維持しながら削除されたレコードを再作成しようとしたときに、この投稿を見つけた他の人に役立つ可能性があります。

元のID列の値で削除されたレコードを再作成するには:http: //msdn.microsoft.com/en-us/library/aa259221 (v = sql.80).aspx

于 2013-07-11T19:39:01.667 に答える