Eu tenho dois SQL Servers 2016 conectados ao Linked Server. Quando eu consulto sys.dm_exec_describe_first_result_set
do servidor remoto, ele retorna o tipo de dados numérico para a tabela de colunas em vez de decimal.
Primeira consulta (executada do servidor remoto)
select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from LinkedServerFoo.DatabaseFoo.dbo.TargetTable', NULL, 0) [source]
Segunda consulta (executada do sql server)
select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from DatabaseFoo.dbo.TargetTable', NULL, 0) [source]
Resultado
Isso é um problema para mim, pois comparo os tipos de dados com base na saída dessas consultas.
Alguma ideia do que pode ser um problema, por que isso acontece e como pode ser resolvido?
- Há também o mesmo problema com
smalldatetime
onde a tabela sys retorna incorretamentedatetime
Os tipos de sistema 106 e 108 são decimais e numéricos, respectivamente. Esses nomes de tipo são sinônimos e podem ser usados alternadamente:
A consulta local retorna o nome do tipo especificado pelo DDL original usado para criar a coluna. A consulta do servidor vinculado, no entanto, retorna o nome do tipo retornado pelo driver do servidor vinculado. Em meus testes, o nome é
numeric
independente se a coluna foi realmente definida comonumeric
oudecimal
.Uma solução alternativa é usar nomes de coluna explícitos na
SELECT
lista TVF*
para que você possa traduzir o nome do tipo para um consistente. Por exemplo: