使用BCP将日期时间数据导入SQL Server仓库

时间:2019-07-01 10:20:16

标签: datetime datetime-format bcp azure-sql-data-warehouse

我每天都会收到一个文本文件,如下所示:

128CAFEE-38B0-5A6A-8C21-E2BDA1E57FE4    353386068937487 10320   2019-06-20T23:56:14Z
128CAFEE-38B0-5A6A-8C21-E2BDA1E57FE4    353386068937487 10320   2019-06-20T23:56:14Z
128CAFEE-38B0-5A6A-8C21-E2BDA1E57FE4    353386068937487 10320   2019-06-20T23:56:14Z

我正在尝试使用BCP将其导入到Azure SQL Server仓库中。

正在加载的表的定义如下:

CREATE TABLE
 mytable
(var1 VARCHAR(36) NOT NULL, 
 var2 BIGINT NOT NULL, 
 var3 INTEGER NOT NULL, 
 var4 DATETIME2 NOT NULL)

我正在使用如下所示的fmt文件:

13.0
4
1       SQLCHAR             0       36      "\t"   1     var1                                         SQL_Latin1_General_CP1_CI_AS
2       SQLBIT              0       1       "\t"   2     var2                                         ""
3       SQLINT              0       4       "\t"   3     var3                                         ""
4       SQLDATETIME         0       8       "\n"   4     var4                                         ""

我在使用datetime元素时遇到问题-我收到以下错误:

Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid date format

是否可以定义日期时间信息是什么,即我可以给BCP一个 YYYY-mm-DD \ THH:MM:SS 样式字符串,以便可以正确解释我的约会吗?

请限制使用BCP的答案。

1 个答案:

答案 0 :(得分:1)

您将无法使用bcp将日期格式直接导入到datetime2列中(据我所知-很高兴得到纠正)。使用登台表,导入到char(20)列中,然后使用CAST来转换它,例如

SELECT CAST( yourCharDateColumn AS DATETIME2 ) AS x
FROM yourStagingTable

使用这种方法,而只需将-c开关与bcp一起使用,您可能会忘记格式文件。演员表在我的测试中成功。

我注意到格式文件中的第二列应标记为SQLBIT。{p>

关于bcp的使用,我有兴趣了解为什么您选择使用此旧式命令工具,其中建议使用Polybase将数据快速获取到Azure SQL数据仓库中。 SQLBIGINT甚至有一个CREATE EXTERNAL FILE FORMAT开关,尽管我没有尝试过,但是可以使用这种格式。如果必须bcp并且源数据来自另一个SQL Server,则在导出时使用本机(DATE_FORMAT)开关效果很好,并且也将不需要格式文件。或者考虑使用Data Factory,它应该能够处理日期列上所需的转换。