在SQL中生成唯一ID并转换唯一ID

时间:2011-10-19 19:16:05

标签: tsql syntax uniqueidentifier

我正在尝试通过创建两个新列值来更新SQL表:唯一的Id,然后是刚创建的相同唯一ID的缩短整数版本

使用一个技巧我发现here(参见底部的'NEWID()方式'),这是我认为可行的:

Update Customer Set [UniqueId] = NEWID(), [UniqueIntegerId] = ABS(CAST(CAST([UniqueId] AS VARBINARY) AS INT))

但这会产生类似

的内容

[UniqueId] [UniqueIntegerId]

3C79 ... 5A4DEB2 754988032

1FD6 ... 828B943 754988032

1F48 ... E80F511 754988032 < ---重复!不想要!

尝试完成此操作的语法是正确的?

1 个答案:

答案 0 :(得分:2)

这不会按预期工作,因为表达式中的[UniqueId]更新之前被计算为值。您可以尝试这样做:

DECLARE @uid uniqueidentifier;
UPDATE Customer
SET
  @uid = [UniqueId] = NEWID(),
  [UniqueIntegerId] = ABS(CAST(CAST(@uid AS VARBINARY) AS INT))

@uid变量的分配值与[UniqueId]相同,然后在另一列的表达式中使用而不是[UniqueId]