5

SQLサーバーに一括挿入する次のコードがあります(ここの下部にある例から取得):

SET IDENTITY_INSERT [dbo].Reporting_DriverScoreCard ON

EXECUTE XP_CMDSHELL 'BCP AT100Reporting.dbo.Reported_Driver_ScoreCard out D:\temp\Reported_Driver_ScoreCard.txt -T -n'
BULK INSERT [dbo].Reporting_DriverScoreCard 
FROM 'D:\temp\Reported_Driver_ScoreCard.txt'
WITH 
(
    DATAFILETYPE  = 'native',
    ERRORFILE = 'D:\temp\error.txt',
    MAXERRORS = 10000 
);

SET IDENTITY_INSERT [dbo].Reporting_DriverScoreCard OFF

ただし、このコマンドを実行すると失敗し、次のエラー メッセージが表示されます。

Explicit value must be specified for identity column in table 'Reporting_DriverScoreCard' either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column.

これは、作成されているtxtファイルの最後に余分な行があるため、ファイルの最後に到達したときに空白行を挿入しようとしているからだと思います(そして、他のすべての行にはIDが設定されています. )

これを使用しようとしている大規模なデータベースが複数あるため、これを適切に機能させる方法はありますか?

4

1 に答える 1

3

結局のところ、クエリに追加する正しい引数が必要でした。最後に、これは私のために働いたクエリです:

EXECUTE XP_CMDSHELL 'BCP AT100Reporting.dbo.Reported_Driver_ScoreCard out D:\temp\Reported_Driver_ScoreCard.dat -T -E -n -k'

SET IDENTITY_INSERT [dbo].Reporting_DriverScoreCard ON

BULK INSERT [dbo].Reporting_DriverScoreCard 
FROM 'D:\temp\Reported_Driver_ScoreCard.dat'
WITH 
(
    KEEPIDENTITY,
    BATCHSIZE = 5000,
    DATAFILETYPE  = 'native',
    ERRORFILE = 'D:\temp\error.txt',
    MAXERRORS = 10000,
    KEEPNULLS
);

SET IDENTITY_INSERT [dbo].Reporting_DriverScoreCard OFF
于 2013-07-26T13:10:29.203 に答える