我每天都会收到一个文本文件,如下所示:
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的答案。
答案 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,它应该能够处理日期列上所需的转换。