在 Azure SQL 数据库管理门户中,我尝试向包含行的现有表添加新列。
我添加了默认值 - 0 - 认为它会将默认值添加到现有行,因此将列设置为“是必需的”(不可为空)就可以了。但是,当我尝试保存时,出现错误:
ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or ...
但是我可以执行以下 SQL 语句:
ALTER TABLE Sales
ADD Purchase int NOT NULL
CONSTRAINT PurchaseDefault DEFAULT 0
当我在 azure 中再次查看表格时,我发现默认值是 ((0))
因此,在我必须添加的下一列中,我尝试将默认值放在双括号 ((0))
中,但这也不起作用。
因此,我在我的开发计算机上访问了 SQL Server Management Studio 2012。在这里,我可以在“默认值或绑定(bind)”选项中添加一个带有 0 的新列。这有效。有趣的是,当我返回时,0 现在是 ((0))。
所以,我的问题是:-
- Azure 中的默认值列与添加默认约束有何不同?
- 为什么这在 SQL Server 2012 中可以,但在 Azure 中不行?
- (()) 是关于什么的?我尝试在谷歌上搜索“双括号/大括号默认约束”的各种组合,但结果是空的。
最佳答案
我认为你遇到的情况是正确的。我不是 DBA,但让我尝试解释一下我目前所知道的一些内容。
如果您使用 SQL Server Management Studio (SSMS) 指定默认值,它将自动用括号括起来。如果您的默认值是静态值,例如零,则为
((0))
,如果它是某些计算值,例如当前日期/时间,则为(GETDATE ())
。但我不太确定为什么它必须用(双)括号括起来我猜您的 SQL Azure 中已有一些记录。您对
... 它将默认值添加到现有行...
的理解不正确。默认值不会影响现有记录。如果您没有明确指定,它只会将值设置为默认值。这就是在 SQL Azure 中应用更改时出现错误的原因。我认为您需要运行一个脚本来为所有现有记录设置此列的默认值,然后应用此更改。类似于UPDATE [Your_Table] SET [Purchase] = 0 WHERE [Purchase] IS NULL
。
希望这有帮助
关于Azure SQL 数据库管理门户 - 默认列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21224752/