-1

を指定する必要があります。test.txtというの明示的な値は、私は次のコマンドを持っているテーブルにID列に対するSQLクエリエディタで

SET IDENTITY_INSERT tUserPreference ON 

BULK INSERT tUserPreference 
FROM 'D:\test.txt' 
WITH 
( KEEPIDENTITY, 
    BATCHSIZE = 2, 
    FIRSTROW = 2, 
    FIELDTERMINATOR = ',' , 
    ROWTERMINATOR = '\n', 
    DATAFILETYPE = 'char', 
    KEEPNULLS 
    ); 
SET IDENTITY_INSERT tUserPreference OFF 
GO 

内容:

"UserPreferenceId","UserId","UserPreferenceValue","UserPreferenceTypeId" 
7858,1194,"FSP,FRB,FWF,FBVS,FRRC",15 
7859,1194,"FIRM",21 
7860,1194,"009,61,114,142,174,233,262,286,303,325,369,389,411,671,690,735,938,943,977,105,200",11 
7861,1194,"B545,B441",12 
7862,1194,"{"FIRM":{"accountType":"Firm","timeInForce":"DAY","routing":"DNR","isAllOrNone":false}}",2 

しかし、私はこれらのコマンドを実行します私は次の結果を参照してください。

Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 4 (UserPreferenceTypeId). 
Msg 2627, Level 14, State 1, Line 3 
Violation of PRIMARY KEY constraint 'PK_tUserPreference_UserPreferenceId'. Cannot insert duplicate key in object 'dbo.tUserPreference'. The duplicate key value is (7859). 
The statement has been terminated. 

のみ1行挿入(7861,1194,"B545,B441",12

テーブルスクリプト作成:

CREATE TABLE [dbo].[tUserPreference](
    [UserPreferenceId] [int] IDENTITY(1,1) NOT NULL, 
    [UserId] [int] NULL, 
    [UserPreferenceValue] [varchar](max) NULL, 
    [UserPreferenceTypeId] [int] NOT NULL, 
CONSTRAINT [PK_tUserPreference_UserPreferenceId] PRIMARY KEY CLUSTERED 
.... 

適切に一括挿入を使用して挿入する方法を?

+2

あなたはSQL Serverが 'BULKのINSERT'時のID値を割り当てたい場合は、フォーマットファイルが必要です。 [ドキュメントを参照](https://msdn.microsoft.com/en-us/library/ms188365.aspx)。 –

+2

[BULK INSERTとID(自動インクリメント)列の可能な複製](URL:http://stackoverflow.com/questions/10851065/bulk-insert-with-identity-auto-increment-column) –

+0

@Chris Pickford私は挿入が必要ですIDフィールド – gstackoverflow

答えて

0

CREATE TABLE tUserPreference1 (DataField VARCHAR(1000)) 

BULK INSERT tUserPreference1 
FROM 'C:\Shared\text.txt' 
WITH 
( 
    FIRSTROW = 2, 
    ROWTERMINATOR = '\n', 
    DATAFILETYPE = 'char', 
    KEEPNULLS 
    ); 

select SUBSTRING(DataField,1,4) AS UserPreferenceId 
     ,SUBSTRING(DataField,6,4) AS UserId 
     ,REVERSE(SUBSTRING(REVERSE(DataField),1,CHARINDEX(',',REVERSE(DataField))-1)) UserPreferenceTypeId 
     ,DataField 
INTO tUserPreference2 
from tUserPreference1 

SELECT * 
     ,SUBSTRING(DataField,11,LEN(DataField)-(11+LEN(UserPreferenceTypeId))) AS UserPreferenceValue 
FROM tUserPreference2 
+0

実際のファイルが長すぎます – gstackoverflow

+0

データの長さを少なくとも知っていますか? ieUserPreferenceIdは常に4桁ですか? UserId 4桁ですか?とUserpreferenceTypeId 1または2桁? – Sam

+0

あなたは正しいです – gstackoverflow

関連する問題