gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:19:00 24 4
gpt4 key购买 nike

我有一个 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)
)

当我使用“脚本”命令定位预先存在的 SQL 数据库时
sqlpackage.exe /Action:Script /SourceFile:DatabaseProject1.dacpac  /Profile:publish.xml /OutputPath:deployscript_test.sql /TargetPassword:redacted

然后我得到以下生成的 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

(我试图防止这种多余的重新创建的主要问题是我偶尔会看到“超出锁定请求超时期限。”在实际部署/发布期间尝试删除约束时出现错误)

最佳答案

问题显然出在 DATETIMEFROMPARTS 的使用中.

如果我改为将表声明为

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

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

关于sql - 在部署 dacpac 时,如何防止 SqlPackage.exe 删除和重新创建约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34322210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com