我收到以下关于我在程序中运行的 SQL 查询的错误消息。SQL Server 2005 T-SQL。
异构查询需要为连接设置
ANSI_NULLS
和选项。ANSI_WARNINGS
这确保了一致的查询语义。启用这些选项,然后重新发出您的查询。(16 级)
修复它很容易,设置ANSI_NULLS
和ANSI_WARNINGS
ON
,但我想知道什么是异构查询。谷歌搜索带来了几十个结果告诉我设置ANSI_NULLS
和ANSI_WARNINGS
,没有解释这个词的含义。查询是:
UPDATE SRV.DB.DBO.TABLE SET Column=
(SELECT Column
FROM SRV1.DB.DBO.TABLE)
我认为这是由于在一个查询中连接到多个数据库引擎,否则我从未收到此错误。
“异构”是否只是指在这种情况下查询两个不同的数据库引擎?
基本上,是的。在“异构链接服务器”上执行“异构”查询。对此链接服务器的所有查询都是异构的。
而“异构”是分布式查询的一个子集
但是“异构”时不时会出现:
请参阅MSDN 上的链接服务器
sp_addlinkedserver
以及“加入异构数据”中查询Active Directory的MSDN示例
和 MSDN 再次“异构数据库复制”
据我所知,是的。
我在您的查询中看到的一个问题是您无法知道将从链接表中返回的行。这只是虚拟代码还是您的查询是以这种方式编写的?
异构只是意味着不同。因此,异构查询位于一个数据库中,并且正在查询不同的数据库。由于数据库不同,因此可能会导致设置不同,从而导致结果与预期不同。