错误消息:此版本的 SQL Server 不支持对“beA2BAero.dbo.aircraft”中的数据库和/或服务器名称的引用
Posted
技术标签:
【中文标题】错误消息:此版本的 SQL Server 不支持对“beA2BAero.dbo.aircraft”中的数据库和/或服务器名称的引用【英文标题】:error message : Reference to database and/or server name in 'beA2BAero.dbo.aircraft' is not supported in this version of SQL Server 【发布时间】:2022-01-12 17:14:42 【问题描述】:我想在同一服务器的多个数据库中使用此查询,在本地它可以工作,但是当我想在 sql server 中使用与 azure 服务器连接的相同查询时,我收到此消息错误消息:
此版本的 SQL Server 不支持引用“beA2BAero.dbo.aircraft”中的数据库和/或服务器名称。
Select count(*) From [xxx1].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx2].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx3].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx4].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx5].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx6].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx7].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx8].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx9].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx10].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx11].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx12].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx13].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx14].[dbo].[aircraft]
UNION ALL
Select count(*) From [xxx15].[dbo].[aircraft]
【问题讨论】:
显然您使用的是 Azure SQL 数据库。如果您这样做,错误会告诉您问题;你不能那样做。不允许跨数据库查询。如果您需要这样的解决方案,那么 Azure SQL 数据库是错误的解决方案或您的数据不应位于 15 个不同的数据库中(可能后者比前者更多)。 抱歉,这不是答案 你为什么首先使用这样的查询?你想通过使用 15 个不同的数据库来实现什么?这很重要。自 2016 年以来的所有 SQL Server 版本都支持所有版本的表分区,甚至是 LocalDB。 @gladiator06m 它是一个答案。你试图做的事情是不可能的。时期。下一个问题是你为什么要这样做?这是 20 年前需要的,但在 2005 年引入表分区时已经过时(ish?我不记得了)。列存储索引等技术可以在压缩数据的同时显着提高性能,从而减少对横向扩展的需求 为什么很重要。数据管理?表现?多租户?您是否正在尝试管理大量数据?然后使用表分区。您是否正在尝试提高性能?只需购买更多 DTU 即可更轻松地做到这一点。或使用 Azure 横向扩展功能之一。一旦您解释了为什么尝试使用联合视图,人们将能够提出解决方案 【参考方案1】:简单的答案是 Azure 不支持跨数据库引用。
但是,有一种方法可以设置它,以便您可以使用SELECT
s。基本上你需要设置外部数据源。
This guide 可以让您了解为用于访问外部数据源的凭据设置用户权限的细节。
一旦设置了权限,您实际上需要在每个数据库中执行此操作:
CREATE EXTERNAL DATA SOURCE [MyDataSourceName]
WITH
( TYPE = RDBMS,
LOCATION=[MyServerLocation],
DATABASE_NAME = [MyDBName],
CREDENTIAL = QueryCredential
);
您可以从那里创建基于外部数据源的表:
CREATE EXTERNAL TABLE [MyExternalTable](
...
) WITH (DATA_SOURCE = [MyDataSourceName])
GO
那么你就可以按照以下方式做一些事情:
Select count(*) From [dbo].[aircraft]
UNION ALL
Select count(*) From [MyExternalTable]
UNION ALL
...
不过,这样做并不是特别建议,因为它会增加更多的攻击机会。
【讨论】:
以上是关于错误消息:此版本的 SQL Server 不支持对“beA2BAero.dbo.aircraft”中的数据库和/或服务器名称的引用的主要内容,如果未能解决你的问题,请参考以下文章
windows server 2008 R2 SP1 安装SQL Server 2008 R2时提示 "此操作系统不支持此版本的 SQL Server 版本"
将数据库项目部署到 SQL Server 2008 Express