批量插入主键ID

时间:2014-09-03 11:55:39

标签: sql sql-server sql-server-2008 tsql sql-server-2012

我想将文件数据批量插入带有主键id列的表中,但是我收到了这个错误。

CREATE TABLE [dbo].[WorkDataLoad]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [RecordLine] [nvarchar](max) NULL,

    CONSTRAINT [PK_WorkDataLoad] PRIMARY KEY CLUSTERED ([Id] ASC)
         WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
               IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
               ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

查询:

truncate table WorkDataLoad

BULK INSERT WorkDataLoad
   FROM 'D:\NPfiles\TS082114.trn'
   WITH (
        TABLOCK,
        KEEPIDENTITY
   )

错误

  

Msg 4832,Level 16,State 1,Line 4
  批量加载:数据文件中遇到意外的文件结尾。

     

Msg 7399,Level 16,State 1,Line 4
  链接服务器“(null)”的OLE DB提供程序“BULK”报告错误。提供商未提供有关错误的任何信息。

     

Msg 7330,Level 16,State 2,Line 4
  无法从OLE DB提供程序“BULK”获取链接服务器“(null)”。

的行

1 个答案:

答案 0 :(得分:3)

保持你的桌子不变并创建这个VIEW(选择除ID(主键)列之外的所有内容)

CREATE VIEW [dbo].[VWWorkDataLoad]
AS
SELECT RecordLine
FROM [dbo].[WorkDataLoad];

现在 BULK INSERT 应如下所示:

BULK INSERT [dbo].[VWWorkDataLoad] FROM 'D:\NPfiles\TS082114.trn' 
WITH (FIRSTROW = 2,FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n');

运行此语句后,您可以检查表中是否应该包含主键记录。希望这有帮助,它对我有用。