我有一个查询来比较我的本地 SQL Server 和链接的 SQL Server 之间的数据。我的问题是我比较的表包含 XML 列。我得到:
消息 9514,级别 16,状态 1,行 3 Xml 数据类型在分布式查询中不受支持。远程对象 [srv].[DB].dbo.[table]' 具有 xml 列。
我不知道如何解决这个问题,因为我没有在 select 语句中显示此列。我虽然可以CAST
,但是当列不在选择列表中时要转换什么?
我看到我不能使用 cast 的解决方法。所以我可能会错过一些东西。
有任何想法吗?
我的测试代码如下所示:
SELECT
TA2.ID FROM [DB].[dbo].[table1] TA2
INNER JOIN [linkedsrv].[DB].[dbo].[table1] PA ON (TA2.ID = PA.ID)
我需要更新 PA:
--UPDATE ALL ON PA
UPDATE XSRV
SET
XSRV.[Description] = SRV.[Description],
XSRV.[Code] = SRV.[Code],
XSRV.[Active] = SRV.[Active],
XSRV.[Expired] = SRV.[Expired],
XSRV.[SType] = SRV.[SType],
XSRV.SupportParameters = CAST(SRV.SupportParameters AS VARCHAR(MAX))
FROM
[PANI_TEST].dbo.[Services] AS SRV
INNER JOIN (SELECT X.ID, X.Code, X.[Description], X.Code, X.Active, X.Expired,
X.SType, CAST(X.XmlParams AS VARCHAR(MAX)) AS XmlParams, X.CreatedDate, X.CreatedBy,
X.ModifiedDate, X.ModifiedBy FROM [PANI_TEST].[dbo].[Services] AS X) AS XSRV ON
(SRV.ID = XSRV.ID)
WHERE
(SRV.[Description] <> XSRV.[Description] ) OR
(SRV.[Code] <> XSRV.[Code] ) OR
(SRV.[Active] <> XSRV.[Active] ) OR
(SRV.[Expired] <> XSRV.[Expired] ) OR
(SRV.[SType] <> XSRV.[SType] ) OR
(CAST(SRV.XmlParams AS VARCHAR(MAX)) <> XSRV.XmlParams);
当然,上面的代码不起作用,因为我使用的是不可更新的派生表。我现在不知道如何更新。如果我使用没有派生表的简单 CAST,我仍然会出错。
可能发生的情况是 SQL Server 想要在尝试加入本地表(包括 XML 列)之前将整个远程表下载到您的 tempdb。
尝试这样的事情:
或者像这样: