Azure 数据工厂因每个具有 TIMESTAMP 列的表而失败并出现 UPSERT

问题描述 投票:0回答:2

我的 Azure 数据工厂对每个具有

TIMESTAMP
列的表抛出错误“无法更新时间戳列”。

ErrorCode=SqlOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=数据库操作失败。请搜索错误以获取更多详细信息。,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Data.SqlClient.SqlException,Message=无法更新时间戳列。,Source=.Net SqlClient Data提供程序,SqlErrorNumber=272,Class=16,ErrorCode=-2146232060,State=1,Errors=[{Class=16,Number=272,State=1,Message=无法更新时间戳列。,},],'

我不想更新专栏本身。但即使我从列映射中删除它,它也会崩溃。这里还没有删除:

enter image description here

我知道

TIMESTAMP
不是一个简单的日期时间,只要该行中的另一列更新,它就会自动更新。

时间戳数据类型只是一个递增数字,不保留日期或时间。

但是我该如何解决这个问题呢?

azure-data-factory upsert sql-timestamp
2个回答
2
投票

我尝试在我的 ADF 上重现该问题,如果我从映射管道运行中删除时间戳列,则不会出现错误。

但是由于这对您不起作用,这里有 2 个解决方法选项:

选项 1 - 在源上,使用查询并从查询中删除时间戳列。

选项 2 - 我尝试重现您的错误,发现它只发生在更新插入时。如果我使用插入,它运行时不会出现错误(尽管它忽略时间戳列上的插入并增加时间戳)。因此,您可以尝试插入到临时表,然后在 sql 中仅更新您想要的列。


0
投票

我面临同样的问题,我将列的数据类型更改为 varchar 以便 upsert 工作,不确定它是否是正确的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.