Генерация уникальных идентификаторов и преобразование уникальных идентификаторов в TSQL - PullRequest
2 голосов
/ 19 октября 2011

Я пытаюсь обновить таблицу SQL, создав два новых значения столбца: уникальный идентификатор, а затем сокращенную целочисленную версию того же уникального идентификатора , который только что создан.

Используя трюк, который я нашел здесь (см. "Путь 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 <--- повторяется! не хочу! </strong>

Какой синтаксис является правильным для попытки достичь этого?

1 Ответ

2 голосов
/ 20 октября 2011

Это не сработает, как ожидалось, поскольку [UniqueId] в выражении оценивается как значение до обновления. Вот что вы можете попробовать вместо этого:

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

Переменной @uid присваивается то же значение, что и [UniqueId], и затем она используется вместо [UniqueId] в выражении для другого столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...