Comment forcer Microsoft Database Project à générer une instruction ALTER pour la contrainte de key primaire au lieu de créer une table temporaire?

J'ai le script suivant pour la table LoginLogo:

CREATE TABLE [LoginLogo] ( [LoginLogoId] INT IDENTITY (1, 1) NOT NULL, [LoginId] INT NOT NULL, [LogoNm] NVARCHAR(255) NULL, CONSTRAINT [PK_LoginLogo_LoginLogoId] PRIMARY KEY CLUSTERED ([LoginId] ASC), CONSTRAINT [FK_LoginLogo_LoginId] FOREIGN KEY ([LoginId]) REFERENCES [Login] ([LoginId]) ); GO CREATE NONCLUSTERED INDEX [IF_LoginLogo_LoginId] ON [LoginLogo]([LoginId] ASC) ON [INDX]; 

J'ai besoin de changer la contrainte de key primaire, donc je viens de changer une ligne, s'il vous plaît voir ci-dessous le changement:

 CONSTRAINT [PK_LoginLogo_LoginLogoId] PRIMARY KEY CLUSTERED ([LoginLogoId] ASC), 

Le projet de database construit parfaitement le code modifié, mais lorsqu'il génère une instruction de mise à jour de la database, il génère une table temporaire au lieu de la simple instruction ALTER. Voir ci-dessous le script généré:

 CREATE TABLE [tmp_ms_xx_LoginLogo] ( [LoginLogoId] INT IDENTITY (1, 1) NOT NULL, [LoginId] INT NOT NULL, [LogoNm] NVARCHAR (255) NULL, CONSTRAINT [tmp_ms_xx_constraint_PK_LoginLogo_LoginLogoId1] PRIMARY KEY CLUSTERED ([LoginLogoId] ASC) ); IF EXISTS (SELECT TOP 1 1 FROM [apps].[LoginLogo]) BEGIN SET IDENTITY_INSERT [apps].[tmp_ms_xx_LoginLogo] ON; INSERT INTO [apps].[tmp_ms_xx_LoginLogo] ([LoginLogoId], [LoginId], [LogoNm]) SELECT [LoginLogoId], [LoginId], [LogoNm], FROM [LoginLogo] ORDER BY [LoginLogoId] ASC; SET IDENTITY_INSERT [tmp_ms_xx_LoginLogo] OFF; END DROP TABLE [LoginLogo]; EXECUTE sp_rename N'[tmp_ms_xx_LoginLogo]', N'LoginLogo'; EXECUTE sp_rename N'[tmp_ms_xx_constraint_PK_LoginLogo_LoginLogoId1]', N'PK_LoginLogo_LoginLogoId', N'OBJECT'; 

Est-il possible de dire au projet de database de générer une instruction ALTER au lieu de créer une table temporaire? Comment puis-je forcer Microsoft Database Project à le faire?

En gardant à l'esprit que si vous changez l'index cluster d'une table, la table sera reconstruite indépendamment du fait que le script fasse ALTER TABLE ou le truc généré par SSDT avec les tables temporaires, la manière habituelle de résoudre ces problèmes est de faire ALTER de time

C'est-à-dire que vous avez besoin d'un script, souvent appelé script de pré-pré-deployment (le pré-deployment ne fonctionnera pas, car il est exécuté après la comparaison), ce qui rend le changement coûteux, de sorte que lorsque la comparaison est effectuée a déjà eu lieu, et ne se reproduit donc pas par le deployment de dacpac.

Ce script doit être exécuté dans le cadre de votre deployment, avant de faire quoi que ce soit du sqlpackage . Vous pouvez spécifier la modification en tant que alter table dans ce script.

Dans ce cas particulier, où la table va être reconstruite dans un sens ou dans l'autre, je ne vois pas comment cela pourrait faire une grande différence dans le time de deployment global.