错误消息:此版本的 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 不支持跨数据库引用。

但是,有一种方法可以设置它,以便您可以使用SELECTs。基本上你需要设置外部数据源。

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 2012 创建数据库快照

sql还原时出现3169错误

将数据库项目部署到 SQL Server 2008 Express

Microsoft SQL Server 管理工作室 (2012)

安装sql server 2005时出现错误