此版本的SQL server不支持引用数据库和/或服务器名称



目标

我正试图用类似于以下的脚本将来自几个不同Azure数据库的数据放入一个新的Azure数据库:

:setvar db1 [dbSource1]
:setvar db2 [dbSource2]
:setvar dbTarget "myNewDatabase"
USE master;
GO
DROP DATABASE IF EXISTS $(dbTarget)
GO
CREATE DATABASE $(dbTarget)
GO
CREATE TABLE $(dbTarget).[dbo].[Tenants](
[TenantId] [nvarchar](450) NOT NULL,
[OwnerObjectId] [nvarchar](max) NOT NULL,
[NetworkId] [nvarchar](450) NOT NULL,
[EndorserType] [int] NOT NULL,
[Active] [bit] NOT NULL DEFAULT 1,
[Region] [nvarchar](450) NOT NULL DEFAULT 'us-central',
CONSTRAINT [PK_Tenants] PRIMARY KEY CLUSTERED 
(
[TenantId] ASC
)
CREATE TABLE $(dbTarget).[dbo].[ProductPlan](
[ProductPlanId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NULL,
[Description] [nvarchar](max) NULL,
[IsStandard] [bit] NOT NULL,
[StripePlanId] [nvarchar](max) NULL,
[IsYearly] [bit] NOT NULL,
CONSTRAINT [PK_ProductPlan] PRIMARY KEY CLUSTERED 
(
[ProductPlanId] ASC
)
INSERT INTO $(dbTarget).[dbo].[Tenants] (TenantId, OwnerObjectId, NetworkId, EndorserType) 
SELECT TenantId, OwnerObjectId, NetworkId, EndorserType FROM $(db1).[domain].[Tenants]
INSERT INTO $(dbTarget).[dbo].[ProductPlan] (ProductPlanId, Name, Description, IsStandard, StripePlanId, IsYearly)
SELECT ProductPlanId, Name, Description, IsStandard, StripePlanId, IsYearly FROM $(db2).[dbo].[ProductPlan]

从本质上讲,我在新数据库中使用与源数据库中完全相同的模式创建表,然后尝试将这些源表中的所有数据插入到目标表中。

注意:这在本地数据库上运行良好,但在我的Azure SQL Server 中的数据库上失败

问题

此版本的SQL server不支持引用"myNewDatabase.dbo.Tenants"中的数据库和/或服务器名称。

所以脚本创建了新数据库,但当它试图在该数据库中创建一个表时,它就抛出了上面的错误。在创建数据库之后和创建第一个表之前,试图通过插入USE myNewDatabase来切换上下文会引发另一个错误:USE statement is not supported to switch between databases. Use a new connection to connect to a different database.

尝试的解决方案

我尝试过建立类似第二个错误状态的新连接,但似乎无法连接到特定的数据库。我总是连接到master,然后再次出现第一个错误。

关于我需要做些什么才能让它发挥作用,有什么想法吗?提前感谢!

在Azure SQL数据库中,要创建数据库,登录名必须是以下之一:

  • 服务器级主体登录
  • 本地Azure SQL Server的Azure AD管理员
  • 作为数据库管理员数据库角色成员的登录名

如果您有权限,您可以在每个数据库中运行create数据库,就像在master数据库或user数据库中一样。

但是Azure SQL数据库不直接支持USE数据库或跨数据库操作,即使这些数据库在同一个Azure SQL Server中。

Azure SQL数据库只支持弹性查询的跨数据库查询。这仍然需要许多步骤来实现跨查询。不支持跨数据库创建表。我们必须在其他数据库上创建一个新的连接(查询会话(。

就目前而言,它是不受支持的,我们无法使它发挥作用。

有关更多详细信息,请参阅:Azure SQL数据库中不支持Transact-SQL语法

最新更新