【问题标题】:How can I query multiple databases by name that reside on a Azure SQL server using SSMS?如何使用 SSMS 按名称查询驻留在 Azure SQL 服务器上的多个数据库?
【发布时间】:2018-12-29 03:59:53
【问题描述】:

我希望能够运行一些临时查询以获得一些快速的结果。以下将返回表foobar 中两个具有相同结构的数据库的行数。

USE Master
GO
select count(*) from MyFirstDB.dbo.foobar;
select count(*) from MySecondDB.dbo.foobar;

这适用于 SQL Server,但 SQL Azure 会返回错误。我读到您使用 SQL Azure 无法更改 SSMS 查询窗口中的数据库上下文。有没有办法使这项工作?如果我想跨两个数据库创建联接会发生什么?

【问题讨论】:

  • 跨数据库查询:azure.microsoft.com/en-gb/blog/…
  • 要对 SSMS 中的多个数据库运行相同的查询,您可以在 SSMS 中创建一个已注册的服务器组,其中包含所需的 Azure 数据库。然后右键单击组名并选择新查询以打开查询窗口。在多服务器查询窗口中运行的具有 1 或 2 部分名称的查询将对每个数据库执行,SSMS 将组合结果(例如select count(*) from dbo.foobar;)请参阅docs.microsoft.com/en-us/sql/ssms/register-servers/…

标签: sql-server azure-sql-server


【解决方案1】:

需要创建链接到另一台服务器的外部数据源和表。您可以使用以下代码创建一个。

CREATE DATABASE SCOPED CREDENTIAL credname
WITH IDENTITY = 'username',
SECRET = 'password';

CREATE EXTERNAL DATA SOURCE data_source_name
WITH
(
 TYPE=RDBMS,
 LOCATION='server.database.windows.net',
 DATABASE_NAME='databasename',
 CREDENTIAL= credname
);

CREATE EXTERNAL TABLE [dbo].[external_table_name](
 -- Copy column definition
 [Id] [uniqueidentifier] NOT NULL,
 [Name] [nvarchar](200) NULL
)
WITH
(
DATA_SOURCE = data_source_name,
SCHEMA_NAME = 'dbo',
OBJECT_NAME = 'tablename'
)

select *
from dbo.[external_table_name]

DROP EXTERNAL TABLE [external_table_name]

DROP EXTERNAL DATA SOURCE [data_source_name]

DROP DATABASE SCOPED CREDENTIAL credname

【讨论】:

    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2014-07-19
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多