在Azure SQL数据库管理门户中,我尝试将新列添加到包含行的现有表中。
我添加了默认值 - 0 - 认为它会将默认值添加到现有行,因此将列设置为“Is Required”(不可为空)就可以了。但是,当我试图保存时,我收到了错误:
ALTER TABLE仅允许添加可包含空值的列,或 指定了DEFAULT定义,或者......
但是我可以执行以下SQL语句:
ALTER TABLE Sales
ADD Purchase int NOT NULL
CONSTRAINT PurchaseDefault DEFAULT 0
当我再次在azure中查看表格时,我看到默认值为((0))
所以,在我必须添加的下一栏中,我尝试将默认值放在双括号((0))
中,但这也不起作用。
所以,我在开发机器上访问了SQL Server Management Studio 2012。在这里,我可以在“默认值或绑定”选项中添加一个0的新列。这很有效。有趣的是,当我回去时0现在是((0))。
所以,我的问题是: -
答案 0 :(得分:0)
我认为你遇到的是正确的。我不是DBA,但让我试着解释我现在所知道的事情。
如果您使用SQL Server Management Studio(SSMS)指定默认值,它将自动用括号括起来。如果您的默认值是静态值,例如零,则它将是((0))
,如果它是某个计算值,例如当前日期/时间,则它将是(GETDATE())
。但我不确定为什么它必须用(双)括号
我猜你的SQL Azure中有一些现有的记录。您对... it would add the default to existing rows ...
的理解不正确。默认值不会影响现有记录。如果没有明确指定,它只会将值设置为默认值。这就是您在SQL Azure中应用更改时出现错误的原因。我认为您需要运行一个脚本来为所有现有记录的此列设置默认值,然后应用此更改。像UPDATE [Your_Table] SET [Purchase] = 0 WHERE [Purchase] IS NULL
。
希望这有帮助