我在使批量插入工作正常时遇到了一些麻烦。目前,我有19个文本文件插入到与文件名相对应的表中。我正在尝试再添加一个。因此,文本文件称为test1.txt
。
这是我正在使用的命令:
USE db_name
TRUNCATE TABLE dbo.test1
DECLARE @cmd varchar(1000)
SET @cmd = 'BULK INSERT db_name.dbo.test1
FROM ''F:\test\test1.txt''
WITH ( FIELDTERMINATOR = ''|'',
FIRSTROW =2,
ROWTERMINATOR = '''+CHAR(10)+''')'
EXEC(@cmd)
因此,表被截断,留下标题,然后使用新数据添加字段值。这适用于所有其他文本文件。这是捕获。过来的数据有一个年份和月份列。我正在使用数据加载工具作为我的ETL过程的一部分,需要实际的yyyy / mm / dd。因此,我使用以下sql来获取我为任何记录提供的年份和月份,并强制它为该特定月份的最后一天(最后一天,因为这是记录我们的老化事务的时间)。这是执行此操作的sql:
SELECT DATEADD(MM, DATEDIFF(MM, -1,
CAST(
CAST([ YEAR ] AS VARCHAR(4)) +
RIGHT('0' + CAST([ MONTH ] AS VARCHAR(2)), 2) +
RIGHT('0' + CAST(1 AS VARCHAR(2)), 2)
AS DATE)), 0) -1 as TransDate
这适用于我的目的。所以如果我得到以下数据2015 | 08,它将把它变成2015/08/31。现在这里是踢球者。当我运行sql server导入/导出向导并将test1.txt插入表中,然后运行该select语句时,它工作得很好。但是使用上面的批量插入将导致select语句在完成插入后返回以下错误:
从字符串转换日期和/或时间时转换失败。
我意识到这可能令人困惑,但在我使用的过程中有很多步骤。如果您有任何疑问或需要澄清,请告诉我。知道这里发生了什么吗?
感谢。