繁体   English   中英

导入bcp输出,在日期时间进行倒推

Importing bcp output, barfing on datetime

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我一直对此感到头疼,所以我终于在征求一些建议。 我们有一个非常不幸的表,它设计得不好,而且已经存在了足够长的时间,以至于有许多客户向其中分别放入了5000万行。

我一直在尝试修改表设计的方法,但是显然,最大的限制是如何有效地迁移数据。 删除主键并重新组织表会浪费事务日志上的磁盘空间。 同样,创建一个新表并执行INSERT new SELECT * OLD。

我开始尝试bcp ,并尝试遵循在这里找到的建议(这是从Oflow文章链接到的-http: //www.sommarskog.se/bulkload.html ),但到目前为止,我在导入方面遇到了问题。 它总是在第一行失败,尝试处理datetime列。 我在任何Oflow文章中都没有找到解决该问题的方法。

我使用-N进行bcp导出以获取所有纯模式,并使用-N创建了格式文件。 我尝试导入的新表在主键和索引上有所不同,而不是列布局; 那没有用。 我尝试创建一个具有相同结构的空表; 那没有用。 我尝试了以上文章中介绍的所有3种导入方法; 他们都没有超过datetime导入问题。

我希望有人可以指导我如何解决datetime导入问题。

表架构:

CREATE TABLE [Notes](
[NoteID] [int] IDENTITY(1,1) NOT NULL,
[ObjectTypeID] [tinyint] NOT NULL,
[ObjectID] [int] NOT NULL DEFAULT ((0)),
[CreationTime] [datetime] NOT NULL,
[NoteTypeID] [tinyint] NOT NULL,
[AuthorUserID] [int] NOT NULL,
[AuthorName] [nvarchar](200) NULL,
[AuthorEmail] [nvarchar](100) NULL,
[Message] [nvarchar](max) NOT NULL,
[ObjectSubTypeID] [tinyint] NOT NULL,
[IpAddr] [nvarchar](48) NULL,
[Source] [tinyint] NULL,
CONSTRAINT [PK_RC_Note] PRIMARY KEY CLUSTERED 
(
[ObjectTypeID] ASC,
[ObjectID] ASC,
[CreationTime] DESC,
[NoteID] 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]

导出方法:

bcp NotesTest.Notes out .\Notes2.bcp -c -N -U foo -P bar -S dbserver
bcp NotesTest.Notes format nul -T  -f Notes.fmt -N -U foo -P bar -S dbserver

导入方法尝试:

bcp NotesTest.Notes in .\Notes2.bcp -U foo -P bar -S dbserver -h TABLOCK -b 50000 -f Notes.fmt

BULK INSERT Notes
FROM '\\myserver\myshare\notes2.bcp'
WITH (
     BATCHSIZE      = 50000
    ,CODEPAGE       = 'RAW'
    ,DATAFILETYPE   = 'native'
    ,FIRSTROW       = 1
    ,FORMATFILE     = '\\myserver\myshare\Notes.fmt'
    ,MAXERRORS      = 20
    ,TABLOCK
    );

SET IDENTITY_INSERT RC.RC_Note ON
INSERT INTO RC.RC_Note (NoteID, ObjectTypeID, ObjectID, CreationTime, NOteTypeID,AuthorUserID,AUthorName, AuthorEmail,Message,ObjectSubTypeID,IpAddr,Source) 
    SELECT NoteID, ObjectTypeID, ObjectID, CreationTime, NOteTypeID,AuthorUserID,AUthorName, AuthorEmail,Message,ObjectSubTypeID,IpAddr,Source
    FROM OPENROWSET(BULK '\\myserver\myshare\notes2.bcp',
    FORMATFILE='\\myserver\myshare\Notes.fmt'
) AS t1;

在所有导入上均收到错误消息(根据方法的不同,其外观也会有所不同):

Bulk load data conversion error (truncation) for row 1, column 4 (CreationTime).

谢谢

2 个回复

请查看本机格式导入选项的描述。

如果表相同,则本机BCP导入的数据文件类型应为“本机”,并且不应使用任何格式文件。 这是两个特定的命令行选项:

Command      Option                  Description
bcp            -n                    Causes the bcp utility to use the native data types of the data.
BULK INSERT  DATAFILETYPE ='native'  Uses the native or wide native data types of the data. Note that DATAFILETYPE is not needed if a format file specifies the data types.

尝试默认的本机文件导入,然后查看它们是否对您有用。

因此,这似乎是出口选择的沉默但致命的冲突。 当我回头查看Vergil的答案中的链接时,我注意到当我切换到纯模式时,我不小心将-c留在了导出行中。 Bcp没有抱怨,但是它产生的输出文件似乎无效。

bcp NotesTest.Notes out .\Notes2.bcp -c -N -U foo -P bar -S dbserver
1 BCP输出正在改变日期格式输出

我试图用这种格式bcp out一个带有datetime字段的表。 但我得到的输出是 请注意我的bcp没有queryout选项,所以我无法手动转换日期格式。 我尝试过使用-n选项,但是我在输出文件中得到了奇怪的字符。 日期格式也不正确。 对此有任何解决方法吗? ...

2 bcp 在导入日期时间时抛出随机字符串截断错误

我正在尝试在大型 csv 数据文件中进行 BCP。 请注意,这是到远程 Windows SQL Server 引擎的 linux BCP。 我在文件中有一个带有日期时间值的列。 示例值: 2017-02-03 00:00:00 数据文件有数百万行。 示例文本: ~~306~~2016-01-10 ...

3 BCP数据导入,无效的时间格式错误

我无法将文本文件的数据加载到数据库表中,并出现持续错误 时间格式无效。 我将时间格式更改为在日期和时间之间包含T,但无济于事。 我还用代替了年,月,日分隔符。 到-但错误仍然存​​在。 这就是我试图从txt文件加载的方式 然后,我继续确认字段的数据类型,前缀长度(这 ...

5 使用 bcp 在日期时间加载数据错误

我正在运行这个 bcp 命令: 此数据的最后一列是相同的日期时间值。 示例数据: 最后一列是日期时间YYYY-MM-DD HH:MM:SS并且它是相同的值。 但是,我收到有关日期格式的随机错误: 如何解决数据格式问题? 如果我将列修改为 varchar,它工作正常,但我需要日期时间。 ...

6 在BCP导出时提供日期时间格式

BCP在YYYY-MM-DD格式的输出输出日期,我需要他们在YYYY.MM.DD格式。 导出文件由另一个严格的应用程序使用。 我要为大量的表做BCP出口,这将是巨大的,如果我可以把这个格式在结果集的所有日期列没有明确指定日期列。 ...

2018-02-26 19:10:33 1 379   bcp
7 从快照复制进行BCP导入以进行恢复

首先,我使用以下链接作为基础: SQL Server论坛上的旧文章。 目标服务器是SQL Server 2016,即分发服务器和订阅服务器。 来源是SQL Server2014。复制工作正常。 这是关于手动加载表。 我试图在特定的一天仅从快照复制源的一个表中加载数据。 我的命令 ...

9 SQL Server - BCP - 格式文件 - 日期时间值问题

我正在使用 SQL Server 2014。 我有一个表,其中 2 列定义为... 有一个通过 SSIS 包创建的文件。 数据文件中的日期时间值以格式输出... 23-12-2019 06:54:57 在格式文件(由 BCP 加载使用)中,字段定义为... 但是我在加载时遇到的 ...

10 使用bcp和格式文件处理日期时间

我正在使用bcp将平面文件导入SQL Server 2005数据库。 我遇到日期时间字段问题。 我的格式文件字段指定为: 我的数据文件的日期格式为:19820101 但是,有些(很多)填充有000000000 由于类型不匹配,00000000日期无法正确导入。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM