我有两个与链接服务器连接的 SQL Server 2016。当我sys.dm_exec_describe_first_result_set
从远程服务器查询时,它返回列表的数字数据类型而不是十进制。
第一个查询(从远程服务器执行)
select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from LinkedServerFoo.DatabaseFoo.dbo.TargetTable', NULL, 0) [source]
第二个查询(从 sql server 执行)
select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from DatabaseFoo.dbo.TargetTable', NULL, 0) [source]
结果
这对我来说是个问题,因为我根据这些查询的输出比较数据类型。
知道可能是什么问题,为什么会这样以及如何解决?
smalldatetime
sys 表错误返回的位置也存在相同的问题datetime
系统类型 106 和 108 分别是十进制和数字。这些类型名称是同义词,可以互换使用:
本地查询返回由用于创建列的原始 DDL 指定的类型名称。但是,链接服务器查询返回链接服务器驱动程序返回的类型名称。在我的测试中,该名称
numeric
与该列是否实际定义为numeric
或无关decimal
。一种解决方法是在 TVF
SELECT
列表中使用显式列名称,*
以便您可以将类型名称转换为一致的名称。例如: