SQL Server 2008每晚批量插入

时间:2015-08-19 17:55:35

标签: sql sql-server-2008

我在使批量插入工作正常时遇到了一些麻烦。目前,我有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语句在完成插入后返回以下错误:

  

从字符串转换日期和/或时间时转换失败。

我意识到这可能令人困惑,但在我使用的过程中有很多步骤。如果您有任何疑问或需要澄清,请告诉我。知道这里发生了什么吗?

感谢。

0 个答案:

没有答案