Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSDT在表的末尾添加2列将导致表重建_Sql Server_Database_Azure_Azure Sql Database_Sql Server Data Tools - Fatal编程技术网

Sql server SSDT在表的末尾添加2列将导致表重建

Sql server SSDT在表的末尾添加2列将导致表重建,sql-server,database,azure,azure-sql-database,sql-server-data-tools,Sql Server,Database,Azure,Azure Sql Database,Sql Server Data Tools,我们正在使用Azure DevOps自动将更改部署到我们的生产数据库,这是一个Azure SQL数据库。这在大多数版本中运行良好,因为我们在大多数情况下都会进行有限的更改。有时给我们带来问题的是桌子重建,这需要很多时间才能完成。最终的结果是好的,只是长时间的运行会导致我们无法承受的网站宕机 我们正在使用VisualStudio中的一个数据库项目来管理此数据库和其他一些数据库。这包括一个xml文件,我们在使用SSDT发布时包含该文件,其中包含部署过程的设置。(即忽略列顺序等) 以下更改导致表的表重

我们正在使用Azure DevOps自动将更改部署到我们的生产数据库,这是一个Azure SQL数据库。这在大多数版本中运行良好,因为我们在大多数情况下都会进行有限的更改。有时给我们带来问题的是桌子重建,这需要很多时间才能完成。最终的结果是好的,只是长时间的运行会导致我们无法承受的网站宕机

我们正在使用VisualStudio中的一个数据库项目来管理此数据库和其他一些数据库。这包括一个xml文件,我们在使用SSDT发布时包含该文件,其中包含部署过程的设置。(即忽略列顺序等)

以下更改导致表的表重建:

CREATE TABLE [dbo].[AccountCompany] (
    [CompanyId]                   INT             IDENTITY (1, 1) NOT NULL,
    [AccountTypeCode]             NVARCHAR (2)    DEFAULT ('00') NOT NULL,
    <Various columns, some with defaults>
    [PONumberMandatoryUpstream] BIT NULL, 
    [PONumberMandatoryDownstream] BIT NULL, 
    CONSTRAINT [PK_AccountCompany] PRIMARY KEY CLUSTERED ([CompanyId] ASC),
    CONSTRAINT [FK_AccountCompany_AccountBranchType] FOREIGN KEY ([BranchTypeCode]) REFERENCES [dbo].[AccountBranchType] ([BranchTypeCode]),
    CONSTRAINT [FK_AccountCompany_AccountCustomerBusinessSegment] FOREIGN KEY ([BusinessSegment]) REFERENCES [dbo].[AccountCustomerBusinessSegment] ([BusinessSegmentCode]),
    CONSTRAINT [FK_AccountCompany_AccountDmsEndpoint] FOREIGN KEY ([DmsEndpointId]) REFERENCES [dbo].[AccountDmsEndpoint] ([DmsEndpointId]),
    CONSTRAINT [FK_AccountCompany_AccountDmsType] FOREIGN KEY ([DmsTypeCode]) REFERENCES [dbo].[AccountDmsType] ([DmsTypeCode]),    
    CONSTRAINT [FK_AccountCompany_AccountType] FOREIGN KEY ([AccountTypeCode]) REFERENCES [dbo].[AccountType] ([AccountTypeCode]),
    CONSTRAINT [FK_AccountCompany_Currency_Purchase] FOREIGN KEY ([PurchaseCurrencyCode]) REFERENCES [dbo].[Currency] ([CurrencyCode]),
    CONSTRAINT [FK_AccountCompany_Currency_Sales] FOREIGN KEY ([SalesCurrencyCode]) REFERENCES [dbo].[Currency] ([CurrencyCode]),
    CONSTRAINT [FK_AccountCompany_MasterLanguage] FOREIGN KEY ([CultureCode]) REFERENCES [dbo].[MasterLanguage] ([CultureCode])
);

GO
CREATE NONCLUSTERED INDEX [IX_AccountCompany_LocationCode_Active]
    ON [dbo].[AccountCompany]([LocationCode] ASC, [Active] ASC)
    INCLUDE([AccountTypeCode], [BranchTypeCode], [DeliveryTimeDealer], [DeliveryTimeDealerGroup], [DeliveryTimeDealerPreferred], [DeliveryTimeFacingPdc], [DeliveryTimeTotalPaccar], [DmsDealerId], [DmsEndpointId], [DmsTypeCode], [FleetCustomerCode], [Guid], [CultureCode], [LogoAssetSequential], [LogoUrl], [Name], [PurchaseCurrencyCode], [RowVersion], [RushOrder], [SalesCurrencyCode]);

GO
CREATE NONCLUSTERED INDEX [IX_AccountCompany_Guid]
    ON [dbo].[AccountCompany]([Guid] ASC);

GO
CREATE NONCLUSTERED INDEX [IX_AccountCompany_DmsTypeCode]
    ON [dbo].[AccountCompany]([DmsTypeCode] ASC);

GO
CREATE NONCLUSTERED INDEX [IX_AccountCompany_AccountTypeCode]
    ON [dbo].[AccountCompany]([AccountTypeCode] ASC);
创建表[dbo]。[AccountCompany](
[CompanyId]整数标识(1,1)不为空,
[AccountTypeCode]NVARCHAR(2)默认值('00')不为空,
[PONumberMandatoryUpstream]位为空,
[PONumberMandatoryDownstream]位为空,
约束[PK_AccountCompany]主键群集([CompanyId]ASC),
约束[FK_AccountCompany_AccountBranchType]外键([BranchTypeCode])引用[dbo]。[AccountBranchType]([BranchTypeCode]),
约束[FK_AccountCompany_AccountCustomerBusiness Segment]外键([BusinessSegment])引用[dbo]。[AccountCustomerBusiness Segment]([BusinessSegmentCode]),
约束[FK_AccountCompany_AccountDsEndpoint]外键([DsEndpointId])引用[dbo]。[AccountDsEndpoint]([DsEndpointId]),
约束[FK_AccountCompany_AccountDmsType]外键([DmsTypeCode])引用[dbo]。[AccountDmsType]([DmsTypeCode]),
约束[FK_AccountCompany_AccountType]外键([AccountTypeCode])引用[dbo]。[AccountType]([AccountTypeCode]),
约束[FK_AccountCompany_Currency_Purchase]外键([PurchaseCurrencyCode])引用[dbo]。[CurrencyCode]([CurrencyCode]),
约束[FK_AccountCompany_Currency_Sales]外键([SalesCurrencyCode])引用[dbo]。[CurrencyCode]([CurrencyCode]),
约束[FK_AccountCompany_MasterLanguage]外键([CultureCode])引用[dbo]。[MasterLanguage]([CultureCode])
);
去
创建非聚集索引[IX_AccountCompany_LocationCode_Active]
在[dbo].[AccountCompany]([LocationCode]ASC、[Active]ASC)上
包括([AccountTypeCode]、[BranchTypeCode]、[DeliveryTimeDealerGroup]、[DeliveryTimeDealerPreferred]、[DeliveryTimePacdC]、[DeliveryTimeTotalPaccar]、[DMSDalerID]、[DmsTypeCode]、[FleetCustomerCode]、[Guid]、[CultureCode]、[LogoAssetSequential]、[LogoUrl]、[Name]、[PurchaseCurrencCode]、[RowVersion],[RushOrder],[SalesCurrencyCode];
去
创建非聚集索引[IX_AccountCompany_Guid]
在[dbo].[AccountCompany]([Guid]ASC)上;
去
创建非聚集索引[IX_AccountCompany_DmsTypeCode]
在[dbo].[AccountCompany]([DmsTypeCode]ASC)上;
去
创建非聚集索引[IX_AccountCompany_AccountTypeCode]
在[dbo].[AccountCompany]([AccountTypeCode]ASC)上;
最后两列PONumberMandatoryUpstream和PONumberMandatoryDownstream可能会导致表重建。这两列都是新的,都添加到表的末尾,没有外键/约束/索引。如果我手动与架构比较进行比较,我只会看到一个ALTER table ADD COLUMN语句,它不会重建ta可悲的。 出于某种原因,自动部署决定表需要重建

有人知道为什么SSDT认为表需要重建吗

我的第一个猜测可能与发布xml文件中的设置有关。我尝试将这些设置与架构比较中的设置进行比较,但似乎没有区别。
如果需要,我可以包括部署日志和发布设置文件。

经过两天的调试,我发现了问题所在。结果是,我们的一位管理员启用了数据库发现和分类。这会添加一些关于表定义中特定列和分类的额外SQL语句,而这些列和分类不在数据库中每个部署都会重新生成这些表,在我们的例子中是44个表


此分类结构非常新,ssdt部署还无法在管道中处理此问题。将这些语句添加到数据库项目中不起作用,因为这样会在管道中产生类似未知语句的错误。我们唯一的选择是禁用分类,直到ssdt支持为止。

您可以手动将这两列添加到数据库项目中吗然后检查SSDT是否要部署任何其他更改?