在我的管道中,我从一个平面CSV文件(分号分隔)到我们内部SQL服务器的一个表中执行upsert。首先,CSV文件中的所有数据类型都被读取为STRING,我对SQL表也做了同样的操作,这意味着我将所有字段设置为NVARCHAR(500)。这工作得很好,upsert基于一个ID字段(EMPLOYEE_ID)。
这个CSV文件来自另一个应用程序(也是基于MS-SQL的)。所以我把所有的NVARCHAR(500)字段都改成了来自源数据库的正确字段。
现在我已经完成了,我得到这个错误:
{
"errorCode": "2200",
"message": "ErrorCode=SqlOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=A database operation failed. Please search error to get more details.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Data.SqlClient.SqlException,Message=The data type text cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.,Source=.Net SqlClient Data Provider,SqlErrorNumber=5335,Class=16,ErrorCode=-2146232060,State=1,Errors=[{Class=16,Number=5335,State=1,Message=The data type text cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.,},],'",
"failureType": "UserError",
"target": "EMP upsert",
"details": []
}
我会看到它试图插入一个文本字段来执行UNION。但是我没有使用文本字段来匹配。有人能告诉我我做错了什么,以及如何解决它吗?
我已经刷新了Azure中的所有架构定义,以确保它正确地看到所有数据类型。
1条答案
按热度按时间kx1ctssn1#
我尝试在我的环境中重现此问题,但最后还是出现相同的错误。
nvarchar(max)
、varchar(max)
和varbinary(max)
”转换数据类型为TEXT
的列。表格Microsoft Document,
SQL Server得未来版本中将删除ntext,text与image数据类型.请避免在新得开发工作中使用这些数据类型,并计划修改当前使用它们得应用程序.请改用nvarchar(max),varchar(max)与varbinary(max).
我在Pre-copy脚本中将Text数据类型的列转换为varchar(max),以便在upsert操作之前更改列数据类型。
查询:
管道执行成功: