Sql server VS数据库项目一直跳过一个表

Sql server VS数据库项目一直跳过一个表,sql-server,azure-sql-database,visual-studio-2019,database-project,Sql Server,Azure Sql Database,Visual Studio 2019,Database Project,我有一个VisualStudio(2019)数据库项目,无论我做什么,都会跳过生成表的过程,我不知道为什么 背景: 我通过从Azure中具有现有表结构的SQL数据库导入创建了该项目。这个数据库基本上是一个原型,我把它拉进来以加快创建“真实”数据库的速度 然后,我修改了项目中几乎所有的表,应用了一些标准的命名约定、索引等。我添加了种子数据文件,作为后期部署的一部分,等等 然后,为了准备数据库和测试数据的干净安装测试,我将所有内容都放在SQL Server数据库中 我的尝试: 首先,我尝试将数据库项

我有一个VisualStudio(2019)数据库项目,无论我做什么,都会跳过生成表的过程,我不知道为什么

背景:

我通过从Azure中具有现有表结构的SQL数据库导入创建了该项目。这个数据库基本上是一个原型,我把它拉进来以加快创建“真实”数据库的速度

然后,我修改了项目中几乎所有的表,应用了一些标准的命名约定、索引等。我添加了种子数据文件,作为后期部署的一部分,等等

然后,为了准备数据库和测试数据的干净安装测试,我将所有内容都放在SQL Server数据库中

我的尝试:

首先,我尝试将数据库项目发布到新的空数据库中。我“生成脚本”(generatescript),执行脚本(从VS)时发现它试图向不存在的表添加索引。我发誓项目表就在那里…而且肯定在项目中。它也将建成。但是看看部署脚本,它没有Item表

我下一步尝试的内容:

快进到下一次尝试,忽略数小时的VS更新、构建、重建、清理、重新启动等。我继续从项目到空数据库进行模式比较,知道它将生成所有create语句,但不包括部署后文件。(我决定以后再手动运行它们)。与空数据库进行比较看起来与预期的一样(只有模式比较屏幕右侧的空白)。我生成更新脚本并查看“预览”(以下摘录),我的项目表就在那里:

** Highlights
     Tables that will be rebuilt
       None
     Clustered indexes that will be dropped
       None
     Clustered indexes that will be created
       None
     Possible data issues
       None

** User actions
     Create
       [db_executor] (Role)
       [dbo].[ApiKey] (Table)
       [dbo].[AppLog] (Table)
       [dbo].[AppLog].[IX_AppLog_SessionId] (Index)
       [dbo].[Customer] (Table)
       [dbo].[Customer].[IX_Customer_ExternalId] (Index)
       [dbo].[Customer].[IX_Customer_OrganizationId] (Index)
       [dbo].[Customer].[UX_Customer_Name] (Index)
       [dbo].[CustomerDepartment] (Table)
       [dbo].[CustomerDepartment].[IX_CustomerDepartment_DepartmentId] (Index)
       [dbo].[CustomerSetting] (Table)
       [dbo].[CustomerSetting].[IX_CustomerSetting_SettingId] (Index)
       [dbo].[Department] (Table)
       [dbo].[Department].[IX_Department_ExternalId] (Index)
       [dbo].[Department].[UX_Department_Code] (Index)
       [dbo].[ImageResource] (Table)
       [dbo].[Item] (Table)
       [dbo].[Item].[IX_Item_UPC] (Index)
       <snip>
有什么建议吗

EDIT1:

为了添加一些附加信息,我确实在输出脚本中看到了一些指向“跳过”表的修改。因此VS显然认为表存在于目标数据库中。由于没有,我推测目标数据库元数据必须存储/缓存在某个地方,并且它已经过时。我已删除obj和bin文件夹。有人知道这个缓存的目标数据库元数据可能在哪里吗

EDIT2:

因此,令人困惑的是,如果我单击“发布”而不是“生成脚本”来神奇地部署数据库,那么发布实际上可以工作,创建所有表。但更奇怪的是,作为发布的一部分生成的
ProjectName.publish.sql
与创建的脚本类似,因为您选择了“Generate Script”,因为25个表中缺少5个表。因此,在发布过程中在后台运行的SQL命令与输出的
ProjectName.Publish.SQL
不同


不幸的是,我需要将发布SQL文件提供给DBA以“真正”运行,我只能对我的开发数据库执行直接VS部署。

将表名从[Item]更改为[Item2]。验证表项模板中是否存在列属性。这很有趣,我使用了Reafctor->Rename,然后发布并查看了脚本,其中有Item2。我重新命名了它,然后它就出现了。我试着执行,同样的问题出现在另一张桌子上。我想我会继续重复这个过程。诡异。可以重命名/重命名每一个并完成它吗?还是等到他们一个接一个出现?魔法已经停止了。订单也有同样的问题。重命名为Order2,但它不在生成的发布SQL脚本中。这是我很久以来碰到的最奇怪的事情,我花了这么多时间在上面!知道VS将表的信息保存在目标数据库中的什么地方吗,可能是缓存的?还是每次发布时都会重新获取以创建部署脚本?让我们看看我是否做对了。从Azure原型开始拉入VS Proj DB。然后修改VS Proj DB(批次)并添加VS Proj种子文件。通过删除Sqlserver数据库中的所有内容进行准备。最后VS Proj DB schema compare to(现在为空)Sqlserver DB==>generate all Create stmt。因此,VS项目数据库中缺少xyz表??源代码是VS Proj DB,所以请看这里。不在目标Sqlserver数据库中。(或更新我对序列的理解…)。
PRINT N'Creating [dbo].[ImageResource]...';


GO
CREATE TABLE [dbo].[ImageResource] (
    [ImageResourceId] INT             IDENTITY (1, 1) NOT NULL,
    [URL]             NVARCHAR (2048) NULL,
    [ContentType]     NVARCHAR (128)  NOT NULL,
    [Width]           INT             NULL,
    [Height]          INT             NULL,
    [IsActive]        BIT             NOT NULL,
    [Created]         DATETIME2 (7)   NOT NULL,
    [CreatedBy]       NVARCHAR (128)  NOT NULL,
    [Modified]        DATETIME2 (7)   NULL,
    [ModifiedBy]      NVARCHAR (128)  NULL,
    CONSTRAINT [PK_ImageResource] PRIMARY KEY CLUSTERED ([ImageResourceId] ASC)
);


GO
PRINT N'Creating [dbo].[Item].[IX_Item_UPC]...';


GO
CREATE NONCLUSTERED INDEX [IX_Item_UPC]
    ON [dbo].[Item]([UPC] ASC);