Azure SQL数据库管理门户 - 默认列值

时间:2014-01-20 01:07:09

标签: azure sql-server-2012 azure-sql-database

在Azure SQL数据库管理门户中,我尝试将新列添加到包含行的现有表中。

New column

我添加了默认值 - 0 - 认为它会将默认值添加到现有行,因此将列设置为“Is Required”(不可为空)就可以了。但是,当我试图保存时,我收到了错误:

  

ALTER TABLE仅允许添加可包含空值的列,或   指定了DEFAULT定义,或者......

但是我可以执行以下SQL语句:

ALTER TABLE Sales
ADD Purchase int NOT NULL
CONSTRAINT PurchaseDefault DEFAULT 0

当我再次在azure中查看表格时,我看到默认值为((0))

enter image description here

所以,在我必须添加的下一栏中,我尝试将默认值放在双括号((0))中,但这也不起作用。

所以,我在开发机器上访问了SQL Server Management Studio 2012。在这里,我可以在“默认值或绑定”选项中添加一个0的新列。这很有效。有趣的是,当我回去时0现在是((0))。

所以,我的问题是: -

  1. Azure中的“默认值”列与添加默认约束有何不同?
  2. 为什么这在SQL Server 2012中没问题,但不是Azure?
  3. (())是什么?我尝试使用谷歌搜索“双括号/括号默认约束”的各种组合,但是空出来了。

1 个答案:

答案 0 :(得分:0)

我认为你遇到的是正确的。我不是DBA,但让我试着解释我现在所知道的事情。

  1. 如果您使用SQL Server Management Studio(SSMS)指定默认值,它将自动用括号括起来。如果您的默认值是静态值,例如零,则它将是((0)),如果它是某个计算值,例如当前日期/时间,则它将是(GETDATE())。但我不确定为什么它必须用(双)括号

  2. 包裹
  3. 我猜你的SQL Azure中有一些现有的记录。您对... it would add the default to existing rows ...的理解不正确。默认值不会影响现有记录。如果没有明确指定,它只会将值设置为默认值。这就是您在SQL Azure中应用更改时出现错误的原因。我认为您需要运行一个脚本来为所有现有记录的此列设置默认值,然后应用此更改。像UPDATE [Your_Table] SET [Purchase] = 0 WHERE [Purchase] IS NULL

  4. 之类的东西

    希望这有帮助