2012-03-28 1 views
-2

У меня есть одна таблица с идентификатором автоматической генерации Я принимаю это значение с помощью @@ identity.How можно преобразовать это в уникальный идентификатор?Convert @@ IDENTITY to uniqueidentifier в sql

select @@IDENTITY 
set @Id = CONVERT(uniqueidentifier, @@IDENTITY) 
+7

Это преобразование не имеет смысла. Что вы пытаетесь достичь? –

+3

Не связано с вашим вопросом, но 'scope_identity()' почти всегда является лучшим выбором, чем '@@ identity'. '@@ identity' дает последний идентификатор для данного сеанса, тогда как' scope_identity() 'дает последний идентификатор в текущем сеансе и области. http://msdn.microsoft.com/en-us/library/ms190315.aspx –

ответ

4

SQL Server uniqueidentifier тип не является уникальным идентификатором. Является GUID, 16 байт RPC UUID тип значения. Преобразование SQL Server uniqueidentifier в и из int не имеет смысла.

+0

Я полностью согласен - это примерно эквивалентно превращению свинца в золото. ;) – bUKaneer

+0

На самом деле, есть своего рода смысл ... Я работаю над базой данных, где мне нужен детерминированный алгоритм для сопоставления значения INT с UUID. Должно быть возможно заполнить младшие биты поля целым значением, а затем использовать какую-то маска для верхних бит. Однако, кажется, имеет смысл просто создать список UUID и проиндексировать их. – TomXP411

0

@@IDENTITY возвращает последнее удостоверение личности на текущей сессии (из INSERT, SELECT INTO или bulk copy).

У вас нет столбца uniqueidentifier в качестве столбца идентификации - это не поддерживается в SQL Server. Поэтому ваш вопрос не имеет смысла, если вы на самом деле не пытаетесь преобразовать идентификатор INT в какой-то хэш?

Наиболее вы могли бы сделать, это взять @@IDENTITY из вставки (из позволяет сказать столбец целое ID с IsIdentity значение ИСТИНА), то хэш его - Примечание: полученный хэш НЕ GUID:

INSERT INTO [Test].[dbo].[tbl_uqTest] 
      (Test) 
    VALUES ('x') 
    SELECT CONVERT(VARCHAR(32), HASHBYTES('MD5', CONVERT(VARCHAR(255), @@IDENTITY)), 2) 

Скажу, однако, я действительно не могу придумать вескую причину для этого!