0

SQL SERVER 2008 でこのクエリを使用しています。

SET IDENTITY_INSERT ABC ON

BULK 
INSERT ABC
FROM 'F:\test.csv'
WITH
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
)
GO

エラーが発生します:

IDENTITY_INSERT が ON に設定されている場合、またはレプリケーション ユーザーが NOT FOR REPLICATION ID 列に挿入している場合は、テーブル 'ABC' の ID 列に明示的な値を指定する必要があります。

「ABC」のテーブル構造は次のとおりです。

ID [int] IDENTITY(1,1) NOT NULL,  -- primary key
aa [varchar](50) NULL,
bb [varchar](50) NULL,
cc [datetime] NULL,
dd [varchar](50) NULL,
ee [varchar](50) NULL,
ff [int] NULL,
gg [varchar](50) NULL,
ii [int] NULL,
jj [int] NULL

CSV ファイルからのサンプル データ

84,0b0dbe1d,192.168.10.221,2012-07-27 16:15:41.503,0b0dbe1d_16-15-18,1.0.0,2,pra,2,NULL
85,111de4b6,192.168.10.221,2012-07-27 16:27:06.060,111de4b6_16-27-05,1.0.0,8,Diane,5,NULL
4

3 に答える 3

1

ジェームズ、あなたのcsvファイルには9つの列の値が含まれていますが、テーブル構造には10の列が含まれているため、エラーが発生しています..そのため、そのエラーが発生しています..SET Identity_Insert ABCをオフにすると、エラーは発生しません

于 2013-04-25T10:03:27.580 に答える
0

データの一括インポート時に ID 値を保持する (SQL Server)から:

データ行をテーブルに一括インポートするときに SQL Server が ID 値を割り当てないようにするには、適切な keep-identity コマンド修飾子を使用します。keep-identity 修飾子を指定すると、SQL Server はデータ ファイル内の ID 値を使用します。これらの修飾子は次のとおりです。

bcp                                          | -E             |  Switch
BULK INSERT                                  | KEEPIDENTITY   |  Argument
INSERT ... SELECT * FROM OPENROWSET(BULK...) | KEEPIDENTITY   |  Table hint

例は、このポーションをあなたのケースに適用する方法を示しています。

BULK 
INSERT ABC
FROM 'F:\test.csv'
WITH
(
    KEEPIDENTITY,  
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
)
GO
于 2013-04-25T09:56:47.827 に答える
0

エラーは、挿入中に列名を指定する必要があることを明確に示しています。

一括挿入中に列名を指定するオプションはないと思います。以下の代替手段を使用できます。

 select * into dbo.Stagingtable from ABC where 1=2
    go

    BULK 
    INSERT Stagingtable
    FROM 'F:\test.csv'
    WITH
    (
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '\n'
    )
    GO
    SET IDENTITY_INSERT ABC ON
GO
    INSERT INto ABC (column1,column2,etc) 
    select * from Stagingtable 
于 2013-04-25T09:49:36.207 に答える