12

Fooという名前のデータベースに、主キーであるBarという名前の列を持つテーブルがIDあり、このデータベースは開発中の SQL Server 上にあります。

実稼働サーバーから開発サーバーにデータをコピーして、そのデータで遊ぶことができるようにしようとしているので、次を実行します。

set IDENTITY_INSERT Foo.dbo.Bar ON
insert into Foo.dbo.Bar
(
   ID
   ,Something
   ,Else
   ,Is
   ,Going
   ,Horribly
   ,Wrong
   ,With
   ,SQL
)
select 
  ID
  ,Something
  ,Else
  ,Is
  ,Going
  ,Horribly
  ,Wrong
  ,With
  ,SQL
from Production.Foo.dbo.Bar

set IDENTITY_INSERT Foo.dbo.Bar OFF

そして、私はエラーが発生します

メッセージ 8107、レベル 16、状態 1、行 1
IDENTITY_INSERT は、テーブル 'Foo.dbo.Bar' に対して既にオンになっています。テーブル 'Foo.dbo.Bar' の SET 操作を実行できません。

うーん..よし、テーブルの IDENTITY_INSERT がオンになっている。したがってSET IDENTITY_INSERT Foo.dbo.Bar ON、クエリの先頭から を削除して実行すると、次のエラーが発生します。

メッセージ 544、レベル 16、状態 1、行 1
IDENTITY_INSERT が OFF に設定されている場合、テーブル 'Bar' の ID 列に明示的な値を挿入できません。

一日中実行できSET IDENTITY_INSERT Foo.dbo.Bar OFFますが、それをオンにしようとするとON、SQL Server 2012 はそれIDENTITY_INSERTが既にオンになっていると言います。

4

3 に答える 3

0

まったく同じエラーが発生しました。私が使用linq-to-sqlしていたテーブルと dbml ファイルは、主キーの ID 列なしで最初に生成されました。
後で主キーを Identity 列に更新しましたが、dbml ファイルを更新するのを忘れていました。

IDENTITY_INSERT が OFF に設定されている場合、テーブル 'BLAH' の ID 列に明示的な値を挿入できません

修正は、dbmlファイルをおかしく更新することでした...

于 2015-07-03T08:37:24.687 に答える