sql - 避免 Windows Azure 中的主键重复

标签 sql azure unique

在 Windows Azure 表存储中,没有允许自动递增 ID 的“类型”。我以为我可以使用“IsIdentity”,但该复选框呈灰色(这应该让我自动递增,对吧?)。

有人可以告诉我如何获得自动递增字段或解决方法吗?

谢谢!

最佳答案

除非由于某种原因,您实际上需要单调递增的数字键,否则使用 DateTime.UtcNow.Ticks.ToString() 是通常的方法。 (由于Table Storage上的PartitionKey值为字符串,需要进行转换。)

这种方法的优点是表存储行会自动按 PartitionKey(然后按 RowKey)排序,因此您将按照插入的顺序返回行,就像 SQL Server 中的 IDENTITY 列一样.

如果您希望返回最近的记录,请改用 (long.MaxValue - DateTime.UtcNow.Ticks).ToString()

请注意,第一种方法将给出接下来 1158 年的 18 位数字。如果您想避免 Y3160 错误,请考虑用前导零填充该值 (DateTime.UtcNow.Ticks.ToString("0000000000000000000"))。

第二种方法确实会给出一个很长一段时间的 19 位数字,远远超过 DateTime.MaxValue,所以你可能没问题。

还请记住,通过负载平衡等,如果两个服务器同时创建记录,则获得重复记录的可能性非常小,因此您应该具有增加键值的重试语义减一。

关于sql - 避免 Windows Azure 中的主键重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12334012/

相关文章:

使用本地 .NET 后端的 Azure 移动服务身份验证

.net - 如何本地开发Windows Azure应用程序

Symfony - CollectionType 字段中的唯一实体?

lua - Lua中如何检查表是否包含某个元素?

mysql - 群组功能不支持引用

mysql - SELECTing 非索引列增加 'sending data' 25x - 为什么以及如何改进?

mysql - SQL:加入列为空的两个表

mysql - Laravel 和 SQL 类型的良好实践

.net - 异常:使用 context.Forward() 和 AuthBot 时堆栈为空?

postgresql - 为什么 Postgres 在涉及唯一约束的情况下不一致地处理 NULL?