使用OPENQUERY将NULL插入地理类型

时间:2019-08-20 15:54:32

标签: sql-server tsql

运行此查询时

CREATE TABLE t
(
tt Geography
)

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

它引发错误

  

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

但是当我运行它时,它运行良好:

INSERT INTO t(tt)
SELECT NULL

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

中进行修复

1 个答案:

答案 0 :(得分:3)

该错误实际上是在告诉您问题所在,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)');