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

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

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

New column

我添加了默认值 - 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))

enter image description here

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

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

所以,我的问题是:-

  1. Azure 中的默认值列与添加默认约束有何不同?
  2. 为什么这在 SQL Server 2012 中可以,但在 Azure 中不行?
  3. (()) 是关于什么的?我尝试在谷歌上搜索“双括号/大括号默认约束”的各种组合,但结果是空的。

最佳答案

我认为你遇到的情况是正确的。我不是 DBA,但让我尝试解释一下我目前所知道的一些内容。

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

  2. 我猜您的 SQL Azure 中已有一些记录。您对 ... 它将默认值添加到现有行... 的理解不正确。默认值不会影响现有记录。如果您没有明确指定,它只会将值设置为默认值。这就是在 SQL Azure 中应用更改时出现错误的原因。我认为您需要运行一个脚本来为所有现有记录设置此列的默认值,然后应用此更改。类似于 UPDATE [Your_Table] SET [Purchase] = 0 WHERE [Purchase] IS NULL

希望这有帮助

关于Azure SQL 数据库管理门户 - 默认列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21224752/

相关文章:

sql-server - 如何使用 ADF 将数据从本地数据库迁移到 Azure 托管数据库?

php - 通过 Azure MySQL 检查用户的登录

azure - 邮件服务器 : using same domain but other hosting

sql - 计数表中值连续出现的次数

java - JDBC bulkcopy 中可能的内存泄漏

c# - 我怎样才能只存储日期时间的日期部分。今天属性到 SQL Server 表日期时间列?

azure - 无法删除 SQL azure 表

python - 列出给定 Azure 帐户的订阅

c# - 上传到 Azure Blob 存储时出现 400 错误

ECAcc 服务器上的 Azure CDN 504 网关超时