我正在尝试通过创建两个新列值来更新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 < ---重复!不想要!
尝试完成此操作的语法是正确的?
答案 0 :(得分:2)
这不会按预期工作,因为表达式中的[UniqueId]
在更新之前被计算为值。您可以尝试这样做:
DECLARE @uid uniqueidentifier;
UPDATE Customer
SET
@uid = [UniqueId] = NEWID(),
[UniqueIntegerId] = ABS(CAST(CAST(@uid AS VARBINARY) AS INT))
@uid
变量的分配值与[UniqueId]
相同,然后在另一列的表达式中使用而不是[UniqueId]
。