我有一个项目,其表定义如下:
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数据库时
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(我主要关注的是试图阻止这种多余的再创造,因为我偶尔会看到“锁定请求超时超过了”。在实际部署/发布期间试图删除约束时出错)
发布于 2022-03-11 21:40:39
这是用于约束的关键字大小写。
对默认情况下的任何关键字(如getdate()或newid() )使用小写。
这些限制将永远取消:
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
);这些将不会:
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
);如果约束是数字的,则应使用双括号:
[LABOR_AMOUNT] MONEY
CONSTRAINT [DF_LABOR_AMOUNT]
DEFAULT ((0)) NULL您还应该将其添加到您的发布配置文件中,但这并不是问题的核心:
<IgnoreKeywordCasing>True</IgnoreKeywordCasing>https://stackoverflow.com/questions/34322210
复制相似问题