如何防止 SqlPackage.exe 在部署 dacpac 时删除和重新创建约束?

Mik*_*sdf 6 sql sql-server sqlpackage

我有一个 Visual Studio sql 项目,其表定义如下:

CREATE TABLE [dbo].[Hoerses]
(
   [HoersId] INT NOT NULL PRIMARY KEY,
   [DatePurchased] datetime NOT NULL CONSTRAINT [DF_Hoerses_DatePurchased] DEFAULT DATETIMEFROMPARTS(1985,01,01,0,0,0,0)
)
Run Code Online (Sandbox Code Playgroud)

当我使用“脚本”命令定位预先存在的 SQL 数据库时

sqlpackage.exe /Action:Script /SourceFile:DatabaseProject1.dacpac  /Profile:publish.xml /OutputPath:deployscript_test.sql /TargetPassword:redacted
Run Code Online (Sandbox Code Playgroud)

然后,即使约束前后具有相同的名称和定义,我也会得到以下生成的 SQL:

PRINT N'Dropping [dbo].[DF_Hoerses_DatePurchased]...';


GO
ALTER TABLE [dbo].[Hoerses] DROP CONSTRAINT [DF_Hoerses_DatePurchased];


GO
PRINT N'Creating [dbo].[DF_Hoerses_DatePurchased]...';


GO
ALTER TABLE [dbo].[Hoerses]
    ADD CONSTRAINT [DF_Hoerses_DatePurchased] DEFAULT DATETIMEFROMPARTS(1985,01,01,0,0,0,0) FOR [DatePurchased];


GO
PRINT N'Update complete.';


GO
Run Code Online (Sandbox Code Playgroud)

(我对试图阻止这种多余的重新创建的主要担忧是因为当它试图在实际部署/发布期间删除约束时,我偶尔会看到“超出锁定请求超时期限。”错误)

Mik*_*sdf 4

问题显然出在使用DATETIMEFROMPARTS.

如果我将表声明为

CREATE TABLE [dbo].[Hoerses]
(
   [HoersId] INT NOT NULL PRIMARY KEY,
   [DatePurchased] datetime NOT NULL CONSTRAINT [DF_Hoerses_DatePurchased] DEFAULT '1985-01-01'
) 
Run Code Online (Sandbox Code Playgroud)

然后 SqlPackage.exe 不再尝试删除并重新添加约束。