【问题标题】:generating custom uniqueidentifier sql server生成自定义唯一标识符 sql server
【发布时间】:2012-08-28 06:11:16
【问题描述】:

我使用 sql server 2012,是否可以基于两个或三个值(主要是 varchars 或十进制)生成唯一标识符值,我的意思是任何采用 0-9 和 a-z 的数据类型。

通常唯一标识符因系统而异。对于我的要求,我需要一个自定义的,当我调用这个函数时,它应该在所有系统中得到相同的值。

我一直在考虑将这些值转换为 varbinary 并获取其中的某些部分并生成一个唯一标识符。这种方法有多好。

我仍在研究这种方法。

请提供您的建议。

【问题讨论】:

  • “选择 NEWID()”有什么问题?
  • “对于我的要求,我需要一个自定义的,当我调用这个函数时,它应该让我在所有系统中得到相同的值”然后你不需要一个 uniqueidentifier ....
  • @David Brabant,NEWID() 生成随机值,但我需要该值特定于我传递的字符串。
  • @Mitch Wheat,我需要唯一标识符的类型,用于其他目的。
  • 根据其他论坛中的答案,我尝试了这个,“SELECT distinct cast(Hashbytes('SHA1',CAST(TableName + ColumnName + ColumnValue AS VARBINARY(max))) as uniqueidentifier) from Locale " 谁能告诉我这个查询有多好。

标签: sql-server uniqueidentifier


【解决方案1】:

您所描述的是值的散列。使用HASHBYTES 函数将您的值消化成散列。但是您对问题的定义与唯一性的要求相矛盾,因为根据定义,将大小为 M 的输入减少为大小为 N 的散列,其中 N 允许唯一性的方式重新定义要求。也就是说,它应该让我在所有系统中获得相同的值的要求必须被删除,因为保证它的唯一方法是准确地输出输入。如果您删除此要求,那么 NEWID() 将满足新要求(是的,它不考虑输入,但它必须满足您的要求)。

【讨论】:

  • 感谢您提到 HASHBYTES,它帮助很大。即使有限制,我仍然更喜欢这种方法。我用表中的 113443 条记录对此进行了检查,得到了唯一值。
【解决方案2】:

Uniqueidentifier 的标准文档详细说明了它们是如何生成的。 http://www.ietf.org/rfc/rfc4122.txt

我会读一读(尤其是 4.1.2。因为它分解了应该如何生成 guid),也许我会继续使用时间戳组件,但硬编码您的网络位置元素,这将为您提供您正在寻找的内容为。

【讨论】:

  • 这是一个很好的链接,我会浏览一遍。谢谢分享。
  • 这篇文章有正确的方法,但没有返回唯一值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2012-07-19
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 2015-11-23
  • 2011-03-26
相关资源
最近更新 更多