【问题标题】:Bulk insert .txt file in SQL在 SQL 中批量插入 .txt 文件
【发布时间】:2015-09-01 08:12:20
【问题描述】:

我正在尝试将 .txt 文件导入高级查询工具(我使用的 SQL 客户端)。到目前为止,我有:

CREATE TABLE #tb_test
(
id INTEGER,
name varchar(10),
dob date,
city char(20),
state char(20),
zip integer
);

insert into #tb_test
values
(1,'TEST','2015-01-01','TEST','TEST',11111)
;

bulk insert #tb_test
from 'h:\tbdata.txt'
    with
    (
    fieldterminator = '\t',
    rowterminator = '\n'
    );

我收到一条错误消息,指出第 1 行存在语法错误。我是否缺少 #tb_test 所在的数据库(如 db.#tb_test)?

这是 tbdata.txt 文件中的一行:

2,'TEST2','2012-01-01','TEST','TEST',21111

【问题讨论】:

  • 您能从您的h:\tbdata.txt 文件中放入示例行吗?
  • 您的 SQL 语法有效!我认为错误在h:\tbdata.txt 中可能是错误的分隔符或空格、空格、...!?
  • 尝试用“int”替换“integer”。
  • 你能发布确切的错误吗?唯一的错误似乎是如果文件错误或执行两次,则此脚本可能会出现...
  • 确切的错误消息:“准备期间出错。37000(-131)[Sybase][ODBC 驱动程序][Sybase IQ]第 1 行(0.02 秒)上 'bulk' 附近的语法错误。”

标签: sql-server tsql insert bulkinsert


【解决方案1】:

我对这个问题很好奇,我找到了以下解决方案:

您的数据以逗号分隔,但您尝试按 TAB 分隔 两个选项:将文件数据更改为制表符分隔fieldterminator = '\t'更改为fieldterminator = ','

直接从文件加载时 DATE 格式存在问题,我最好的解决方案是将临时字段 dob 更改为 VARCHAR(20) 类型,然后在传递到最终显示/数据存储时转换为 DATE。

以下是更正后的代码:

CREATE TABLE #tb_test
(
id INTEGER,
name varchar(10),
dob varchar(20),
city char(20),
state char(20),
zip integer
);

insert into #tb_test
values
(1,'TEST','2015-01-01','TEST','TEST',11111)
;

bulk insert #tb_test
from 'h:\tbdata.txt'
    with
    (
    fieldterminator = ',',
    rowterminator = '\n'
    );

【讨论】:

  • 感谢您的反馈。我确信这在 SQL Server 中有效;但是,我使用的是 Sybase IQ 工具。
  • @GBR24 好的,我没有使用 Sybase 对其进行测试。是否有可能即使在 Sybase 中,字段终止符也需要在 data.txt 文件和批量插入参数之间保持一致?还找到了这个 [链接] (infocenter.sybase.com/help/index.jsp?topic=/…) 并搜索了“-131 bulk”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多