sql-server - VS 数据库项目不断跳过一个表
问题描述
我有一个 Visual Studio (2019) 数据库项目,无论我做什么都会跳过生成表,我不知道为什么。
背景:
我通过从 Azure 中具有现有表结构的 SQL 数据库导入来创建项目。该数据库几乎是一个原型,我将其拉入其中以加快创建“真实”数据库的速度。
然后,我修改了项目中几乎所有的表,应用了一些标准命名约定、索引等。我添加了种子数据文件作为部署后的一部分等。
然后为了准备数据库和测试数据的全新安装测试,我将所有内容都放在 SQL Server 数据库中。
我尝试了什么:
首先,我尝试将数据库项目发布到我新的空数据库。我“生成脚本”,执行脚本(来自 VS)只是发现它正在尝试向不存在的表添加索引。我发誓 Item 表就在那里……果然它在 Project 中。它也将建造。但是查看部署脚本,它没有 Item 表。
我接下来尝试了什么:
快进到我的下一次尝试,忽略数小时的 VS 更新、构建、重建、清理、重新启动等。我继续从我的项目到空数据库进行模式比较,知道它将生成我所有的创建语句,但是不包括我的部署后文件。(我决定以后可以手动运行它们)。与一个空数据库进行比较看起来就像人们期望的那样(模式比较屏幕右侧只有空白)。我生成更新脚本并查看“预览”(摘录如下),我的项目表在那里:
** 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>
接下来我查看生成的 SQL 脚本,发现我的 Item 表再次被省略,Item 上的索引紧跟 ImageResource 表创建后出现:
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);
有什么建议么?
编辑1:
要添加一些附加信息,我确实在输出脚本中看到有一些 ALTER 指向我的“跳过”表。所以VS清楚地认为该表存在于目标数据库中。由于它没有,我推测目标数据库元数据必须存储/缓存在某处并且它已经过时了。我已经删除了 obj 和 bin 文件夹。任何人都知道这个缓存的目标数据库元数据是否/在哪里?
编辑2:
令人困惑的是,如果我单击“发布”而不是“生成脚本”来神奇地部署数据库,则发布实际上可以工作,创建所有表。但更奇怪的是ProjectName.publish.sql
,作为发布的一部分生成的内容就像您选择“生成脚本”一样,因为它在 25 个表中缺少5 个。因此,在发布期间暗中运行的 SQL 命令与输出的不同ProjectName.publish.sql
。
不幸的是,我需要将发布 SQL 文件提供给 DBA 才能“真正”运行,我只能将 VS 直接部署到我的开发数据库。
解决方案
推荐阅读
- ios - Tableview 未在 xcode 9.3 中重新加载数据
- c - 在 OpenSSL 0.9.8a 中验证 RSA 签名
- sql-server - 来自 sys.sysusers 的查询仅返回部分记录
- angular - 通过其他 div 的 ngIf 生成一些 div
- java - JAVA JSON 保存文件
- android - Firestore 应用程序在调试中工作,但签名的 apk 给出错误
- hadoop - 成功的任务在尝试提交时生成 mapreduce.counters.LimitExceededException
- ios - 将背景设置为透明后的iOS UINavigationController显示黑屏
- azure - Cosmos DB 存储过程在没有 PartitionKey 的情况下无法执行
- python - Openpyxl: unexpected fail with CellIsRule function