Eu tenho uma consulta para comparar dados entre meu SQL Server local e o SQL Server vinculado. Meu problema é que a tabela que comparo contém coluna XML. Eu recebo:
Msg 9514, Nível 16, Estado 1, Linha 3 O tipo de dados Xml não é suportado em consultas distribuídas. Objeto remoto [srv].[DB].dbo.[tabela]' tem coluna(s) xml.
Não sei como consertar isso, porque não mostro essa coluna dentro da instrução select. Eu pensei que posso CAST
, mas quando a coluna não está na lista de seleção, o que lançar?
Vejo que existe uma solução alternativa com cast by não consigo. Então pode ser que eu perca alguma coisa.
Alguma ideia?
Meu código de teste se parece com:
SELECT
TA2.ID FROM [DB].[dbo].[table1] TA2
INNER JOIN [linkedsrv].[DB].[dbo].[table1] PA ON (TA2.ID = PA.ID)
Preciso atualizar o 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);
Claro que o código acima não está funcionando porque utilizo tabela derivada, que não é atualizável. Eu não descobrir agora como atualizar. Se eu usar CAST simples sem tabela derivada, ainda recebo erro.
O que provavelmente está acontecendo é que o SQL Server deseja baixar toda a tabela remota para seu tempdb antes de tentar ingressar na tabela local, incluindo a coluna XML.
Tente algo assim:
Ou assim: