2012-03-28 38 views
-2

我有一个带有自动生成ID(标识列)的表 我使用@@ identity.I可以将此值转换为唯一标识符吗?将@@ IDENTITY转换为sql中的uniqueidentifier

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

该转换没有意义。你想达到什么目的? – 2012-03-28 16:35:14

+3

与您的问题无关,但'scope_identity()'几乎总是比'@@ identity'更好的选择。 '@@ identity'给出给定会话的最后一个身份,而'scope_identity()'给出当前会话和范围中的最后一个身份。 http://msdn.microsoft.com/en-us/library/ms190315.aspx – 2012-03-28 16:55:40

回答

4

SQL Server uniqueidentifier类型不是“唯一标识符”。是一个GUID,一个16字节的RPC UUID类型的值。将SQL Server uniqueidentifierint进行转换或从int转换是没有意义的。

+0

我完全同意 - 大致相当于把铅变成黄金。 ;) – bUKaneer 2012-08-10 09:03:40

+0

实际上,它有一种意义上的...我正在研究一个数据库,我需要一个确定性算法来将INT值映射到UUID。应该可以用整数值填充字段的低位,然后对高位使用某种掩码。但是,创建一个UUID列表并将它们编入索引似乎更有意义。 – TomXP411 2014-03-21 20:40:50

0

@@IDENTITY返回当前会话中的最后一个标识(来自INSERTSELECT INTObulk copy语句)。

你不能有一个uniqueidentifier列设置为标识列 - 这在SQL Server中不受支持。因此,除非你真的试图将INT标识转换为某种散列,否则你的问题是没有意义的?

最你可以做的就是把@@IDENTITY自刀片(中可以说与IsIdentity设置为true的整数ID列),然后凑了 - 注意:结果散列不是一个GUID

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

但我会说 - 我真的不能想到这样做的好理由!

相关问题