我在将 SQL 2014 数据库迁移到 Azure 数据库时遇到问题。除了不在同一架构中的表之间的任何 FK 关系外,我能够迁移所有内容。例如,2 个表:
CREATE TABLE [dbo].[User] (
[UserGUID] UNIQUEIDENTIFIER CONSTRAINT [DF_CoBRAUser_CoBRAUserGUID] DEFAULT (newsequentialid()) NOT NULL,
[UserName] NVARCHAR (400) NOT NULL,
[OrganizationName] NVARCHAR (100) NOT NULL,
[Title] NVARCHAR (100) NULL,
[Department] NVARCHAR (100) NULL,
[FirstName] NVARCHAR (100) NULL,
[LastName] NVARCHAR (100) NULL,
[UserImage] VARBINARY (MAX) NULL,
[DateCreated] DATETIME NOT NULL,
[DateLastModified] DATETIME NOT NULL,
[MotherTongue] NVARCHAR (50) NULL,
[LockoutEndDateUtc] DATETIME NULL,
[ClusterID] INT IDENTITY (1, 1) NOT NULL,
CONSTRAINT [PK_User] PRIMARY KEY NONCLUSTERED ([UserGUID] ASC)
);
GO
CREATE UNIQUE CLUSTERED INDEX [IX_User_ClusterID] ON dbo.User ([ClusterID])
GO
create schema [CConfigD]
GO
CREATE TABLE [CConfigD].[Alarm] (
[AlarmGUID] UNIQUEIDENTIFIER CONSTRAINT [DF_Alarm_AlarmGUID] DEFAULT (newsequentialid()) NOT NULL,
[CreatedBy] UNIQUEIDENTIFIER NOT NULL,
[AlarmText] NVARCHAR (1000) NOT NULL,
[DateCreated] DATETIME NOT NULL,
[DateLastModified] DATETIME NOT NULL,
CONSTRAINT [FK_Alarm_User] FOREIGN KEY ([CreatedBy]) REFERENCES [dbo].[User] ([UserGUID])
);
这在我的 sql 2014 框上运行良好,如果我尝试在 azure 数据库上运行 dacpac,我会收到以下错误:
消息 1776,级别 16,状态 0,第 8 行在引用表“dbo.User”中没有与外键“FK_Alarm_User”中的引用列列表匹配的主键或候选键。消息 1750,级别 16,状态 1,第 8 行无法创建约束或索引。查看以前的错误。
这是不允许的,我不知道吗?为了允许这种外键,我需要启用一个设置吗?
错误消息是不言自明的。
UserGUID
您需要 . 中列的主键或唯一索引/约束dbo.[User]
。如果存在(您稍后对其进行了编辑),则不应收到该错误消息。
如果您仅在部署 dacpac 时收到此错误消息,您可以将该 dacpac 发布到某处吗?我无法通过直接运行它来使该代码在 Azure SQL 数据库上失败,但是 dacpac 可能以错误的顺序列出了创建脚本,或者约束被分离到不同的(稍后的)步骤中并且不在正确的顺序,或者 dacpac 仅将更改部署到一个模式,而另一个尚未更新。