使用带或不带PK变量的.text批量插入

时间:2013-06-27 16:56:34

标签: sql sql-server tsql

我想将.txt文件数据插入到我的sql-server db中。我在.txt文件中使用和不使用PK-Variable时尝试了它都会给我一个错误。 我的问题:

  

BULK INSERT DB.Schema.Table FROM'C:\ Users \ test.txt'WITH   (FIELDTERMINATOR =';')GO

  1. 没有PK Var我得到错误:
  2.   

    批量加载数据转换错误(类型不匹配或无效字符   对于第1行,第1列(PK_ID)的指定代码页。消息4864,   16级,1号国家,1号线

    1. 使用PK Var我得到错误:
    2.   

      Msg 4864,Level 16,State 1,Line 1批量加载数据转换错误   (为指定的代码页键入不匹配或无效字符)   第1行,第1列(PK_ID)。 Msg 2627,Level 14,State 1,Line 1 Violation   PRIMARY KEY约束'PK_Table'。无法插入重复键   对象'dbo.Table'。重复键值为(1)。声明有   已被终止。

      .txt文件内容的一个示例:

      PK_ID; VNAME; n名称;用户名;性别
      1;史密斯; Smither; SM;雄
      2;添;蒂莫; TI;雄

      AutoIncrem已开启。

2 个答案:

答案 0 :(得分:1)

看看你的例子.txt。文件内容,我认为你将标题作为一行加载到表中。尝试:

BULK INSERT DB.Schema.Table FROM 'C:\Users\test.txt' WITH
    (FIELDTERMINATOR = ';',
     FIRSTROW=2)
GO

答案 1 :(得分:1)

我的解决方案:我无法解决上述问题。一些ppl说将ID作为列名放入txt文件并保持条目打开(如(,Hans,Maier)),对我来说没有用。我发现正确的方法是创建一个临时表。登台表只是一个没有主键的普通表,您可以在其中批量插入数据。在这里,您可以根据需要操作数据。之后,将该临时表中的数据插入到所需的表中。 Insert Data from one table to another很好地描述了如何做到这一点。好处是您可以更新表,因为批量插入只是为您提供了插入数据而不是更新的选项。