部署dacpac时,如何防止SqlPackage.exe删除和重新创建约束?
我有一个Visual Studio sql项目,其表定义如下:部署dacpac时,如何防止SqlPackage.exe删除和重新创建约束?,sql,sql-server,sqlpackage,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) ) 当我使用“Script”命令将一个预先存在的SQ
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数据库作为目标时
然后,即使约束在前后具有相同的名称和定义,我也会得到以下生成的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不再尝试删除和重新添加约束。Dacpac部署通过将数据库架构的XML构造与VS项目中的XML构造进行比较来工作。 有时,这个过程会被语法上的细微之处所混淆,从而导致重复您所描述的更改。
我的建议是,转到已部署的数据库,编写出问题对象的脚本,并将其粘贴回该对象的VisualStudio文件的实现上。这解决了明显的差异,因此部署不再被愚弄为需要实现更改。我还找到了一篇帮助我的文章。 基本上,本文中提到了以下可能的问题:
getdate()
,sysutcdatetime()
,getutcdate()
,以及newid()
myDate datetime2 DF_myTable_myDate默认值(getdate())不为空
((0))
,但我注意到字符串值没有[]
非常感谢。我的索引需要所有的2,3和4!
CREATE TABLE [dbo].[Hoerses]
(
[HoersId] INT NOT NULL PRIMARY KEY,
[DatePurchased] datetime NOT NULL CONSTRAINT [DF_Hoerses_DatePurchased] DEFAULT '1985-01-01'
)
myBit bit DF_myTable_myBit DEFAULT((0)) NOT NULL
-- Column check
CONSTRAINT CH_myTable_someCheck CHECK ([myColumn]>(0))
-- Function check
CONSTRAINT CH_myTable_anotherCheck CHECK ([dbo].[someFunc]([myColumn],[myAnotherColumn])=(1))