在构建从文件共享到Azure SQL的非常基本的复制数据任务时,遇到空数据导致的各种错误:
ErrorCode = TypeConversionFailure,转换时发生异常 类型'String'的列名'EndDate'的值''(精度:, scale :)键入“ DateTime”(精度:255,比例尺:255)。额外 info:无法将字符串识别为有效的DateTime。
我相信这是由相同原因引起的另一种情况:
ErrorCode = TypeConversionFailure,转换时发生异常 类型“字符串”中的列名“合同ID”的值“”(精度:, scale :)来输入“ Guid”(精度:255,比例尺:255)。附加信息: 无法识别的Guid格式。
我需要做的就是在复制到SQL表时将空数据视为NULL。我发现的唯一选项是CSV数据集中的“空值”;并且默认设置为空。
下面是CSV数据集的代码:
{
"name": "CSV",
"properties": {
"linkedServiceName": {
"referenceName": "CSV",
"type": "LinkedServiceReference"
},
"parameters": {
"FileName": {
"type": "string"
}
},
"annotations": [],
"type": "DelimitedText",
"typeProperties": {
"location": {
"type": "AzureFileStorageLocation",
"fileName": {
"value": "@dataset().FileName",
"type": "Expression"
},
"folderPath": "output"
},
"columnDelimiter": ",",
"escapeChar": "\\",
"firstRowAsHeader": true,
"quoteChar": "\""
},
"schema": []
}
}
csv文件确实使用双引号作为限定符。源文件中的那些空数据如下所示:
"b139fe4d-f48a-4158-8196-a43500b3bf02","19601","Bar","2015/02/02","","","","","","","","","","",""
答案 0 :(得分:2)
由于“复制活动”无法处理空值,因此我们需要使用“数据流”将字段转换为NULL值。
这是我使用您的示例进行的测试:
Create table TestNull(
Column1 UNIQUEIDENTIFIER null,
Column2 varchar(50) null,
Column3 varchar(60) null,
Column4 DateTime null,
Column5 varchar(50) null,
Column6 varchar(50) null
)
iifNull(Column_1,toString(null()))
来判断该字段是否为空,如果为空,则将其替换为NULL值。