【发布时间】:2019-01-28 15:05:33
【问题描述】:
在我的 .sqlproj 项目中,我有许多 SQL 数据库表,其中包含具有默认约束的列,例如:
CREATE TABLE TableName
(
-- Some other columns defined too
[State] TINYINT NOT NULL DEFAULT (0),
)
当我针对生产数据库运行项目的 SSDT schema compare 时,会发生以下情况。据报道,与上述类似的一些表格没有差异,而据报道有以下差异。
比较工具说项目有这个(这是真的,所有其他表也是如此):
-- Single braces around zero
[State] TINYINT DEFAULT (0) NOT NULL
但是数据库有这个:
-- Double braces around zero
[State] TINYINT DEFAULT ((0)) NOT NULL
这很烦人,因为它会导致报告许多无用的更改。更烦人的是,我有十个表具有这样的列定义,但仅报告一个表的差异。
我尝试打开 SSMS 并右键单击生产数据库中的表和 将表编写为,CREATE To new window 它在创建脚本中产生以下行:
ALTER TABLE [dbo].[TableName]
ADD DEFAULT ((0)) FOR [State]
所有表格都发出相同的内容,但差异仅报告比较中的一个表格。
我该如何解决这个问题?我怎么知道为什么这个表是特殊的,并且只报告这个表的差异?
【问题讨论】:
-
嗯,这很奇怪。您可以查看
sys.default_constraints。默认约束表达式以规范形式解析和存储,这就是添加括号的原因。如果你在脚本中执行DEFAULT 0,它会被存储为((0)),这就是SSMS 报告的内容——但是,在其他情况下,它是如何到达(0)的还不清楚(你会期望额外的括号总是被剥离),或者为什么比较不会总是考虑到这一点。 -
您可以尝试使用最新版本的 SSDT 吗?请始终使用最新版本的 SSDT 和 SSMS,以获得最佳的 Azure SQL 数据库体验。
标签: sql visual-studio visual-studio-2015 azure-sql-database sql-server-data-tools