首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止SqlPackage.exe在部署dacpac时删除和重新创建约束?

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

Stack Overflow用户
提问于 2015-12-16 21:14:57
回答 4查看 3.5K关注 0票数 5

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

代码语言:javascript
复制
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)
)

当我用"Script“命令瞄准一个预先存在的SQL数据库时

代码语言:javascript
复制
sqlpackage.exe /Action:Script /SourceFile:DatabaseProject1.dacpac  /Profile:publish.xml /OutputPath:deployscript_test.sql /TargetPassword:redacted

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

代码语言:javascript
复制
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

(我主要关注的是试图阻止这种多余的再创造,因为我偶尔会看到“锁定请求超时超过了”。在实际部署/发布期间试图删除约束时出错)

EN

Stack Overflow用户

发布于 2022-03-11 21:40:39

这是用于约束的关键字大小写。

对默认情况下的任何关键字(如getdate()newid() )使用小写。

这些限制将永远取消:

代码语言:javascript
复制
CREATE TABLE [dbo].[APPLICATION_ERROR]

(
    [ERROR_ID]      UNIQUEIDENTIFIER
        CONSTRAINT [CT_ERROR_ID] DEFAULT (NEWID()) NOT NULL,
    [ERROR_DATE]    DATETIME
        CONSTRAINT [CT_ERROR_DATE] DEFAULT (GETDATE()) NULL
);

这些将不会:

代码语言:javascript
复制
CREATE TABLE [dbo].[APPLICATION_ERROR]

(
    [ERROR_ID]      UNIQUEIDENTIFIER
        CONSTRAINT [CT_ERROR_ID] DEFAULT (newid()) NOT NULL,
    [ERROR_DATE]    DATETIME
        CONSTRAINT [CT_ERROR_DATE] DEFAULT (getdate()) NULL
);

如果约束是数字的,则应使用双括号:

代码语言:javascript
复制
   [LABOR_AMOUNT] MONEY
     CONSTRAINT [DF_LABOR_AMOUNT]
                DEFAULT ((0)) NULL

您还应该将其添加到您的发布配置文件中,但这并不是问题的核心:

代码语言:javascript
复制
<IgnoreKeywordCasing>True</IgnoreKeywordCasing>
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34322210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档