首页 > 解决方案 > 使用 OPENQUERY 将 NULL 插入地理类型

问题描述

当我运行这个查询

CREATE TABLE t
(
tt Geography
)

INSERT INTO t(tt)
SELECT *
FROM OPENQUERY([Server2],'SELECT NULL')

它抛出一个错误

消息 206,级别 16,状态 2,第 14 行操作数类型冲突:int 与地理不兼容

但是当我运行它时,它工作正常:

INSERT INTO t(tt)
SELECT NULL

我需要使用OPENQUERY,如何解决上述问题?理想情况下,我需要修复OPENQUERY

标签: sql-servertsql

解决方案


该错误实际上是在告诉您这里的问题,NULL其值类型为int. 这是因为你没有为你的列定义一个类型,所以默认是int并且该数据类型是从OPENQUERY. 您可以通过运行以下命令来查看:

SELECT system_type_name
FROM sys.dm_exec_describe_first_result_set(N'SELECT NULL;',NULL,0);

返回的通知值为int. 您需要硬转换您的价值:

INSERT INTO t(tt)
SELECT *
FROM OPENQUERY([Server2],'SELECT CONVERT(geography,NULL)');

推荐阅读