我有一个项目,其表定义如下:
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(我主要关注的是试图阻止这种多余的再创造,因为我偶尔会看到“锁定请求超时超过了”。在实际部署/发布期间试图删除约束时出错)
发布于 2015-12-16 21:14:57
问题显然在于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不再尝试删除&重新添加约束。
发布于 2017-03-07 10:55:23
Dacpac部署的工作方式是将数据库模式的XML构造与VS项目的XML结构进行比较。有时,这个过程会被语法细节所混淆,导致重复您所描述的更改。我的建议是,转到已部署的数据库,编写麻烦的对象,并将其粘贴到Visual文件的实现上。这解决了明显的差异,因此部署不再被愚弄到相信它有一个改变要实现。
发布于 2020-06-13 13:56:11
我还找到了一篇对我有帮助的文章。http://johnnydba.blogspot.com/2015/07/are-your-vs-database-projects-dropping.html
基本上,这些都是该条中提到的可能问题:
getdate()、sysutcdatetime()、getutcdate()和newid()。myDate datetime2 DF_myTable_myDate DEFAULT(getdate()) NOT NULL((0))括起来,但我注意到字符串值不包括在内。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))[]括起来。https://stackoverflow.com/questions/34322210
复制相似问题