2012-03-28 8 views
-2

Ich habe eine Tabelle mit automatisch generiere ID (Identität Spalte) Ich nehme diesen Wert mit @@ Identität. Wie kann dies in eindeutige Kennung konvertieren?Convert @@ IDENTITY zu Uniqueidentifier in Sql

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

Diese Umwandlung macht keinen Sinn. Was versuchst du zu erreichen? –

+3

Nicht verwandt mit Ihrer Frage, aber 'scope_identity()' ist fast immer eine bessere Wahl als '@@ identity'. '@@ identity' gibt die letzte Identität für eine gegebene Sitzung an, während' scope_identity() 'die letzte Identität in der aktuellen Sitzung und im aktuellen Bereich angibt. http://msdn.microsoft.com/en-us/library/ms190315.aspx –

Antwort

4

SQL Server uniqueidentifier Typ ist kein eindeutiger Bezeichner. Ist ein GUID, ein 16 Byte RPC UUID Werttyp. Das Konvertieren eines SQL Servers uniqueidentifier zu und von int macht keinen Sinn.

+0

Ich stimme völlig zu - in etwa gleichbedeutend damit, Blei in Gold zu verwandeln. ;) – bUKaneer

+0

Eigentlich gibt es eine Art Sinn ... Ich arbeite an einer Datenbank, wo ich einen deterministischen Algorithmus brauche, um einen INT-Wert einer UUID zuzuordnen. Es sollte möglich sein, die unteren Bits des Feldes mit einem ganzzahligen Wert zu füllen und dann eine Art Maske für die oberen Bits zu verwenden. Es scheint jedoch sinnvoller zu sein, nur eine Liste von UUIDs zu erstellen und diese zu indizieren. – TomXP411

0

@@IDENTITY gibt die letzte Identität in der aktuellen Sitzung zurück (aus einer INSERT, SELECT INTO oder bulk copy Anweisung).

Sie können keine uniqueidentifier-Spalte als Identitätsspalte festlegen - dies wird in SQL Server nicht unterstützt. Daher macht Ihre Frage keinen Sinn, wenn Sie nicht wirklich versuchen, eine INT-Identität in eine Art Hash zu konvertieren?

Die Sie @@IDENTITY von einem Einsatz nehmen tun könnten (können von einer ganzen Zahl ID-Spalte mit IsIdentity Satz wahr sagen), dann es Hash - HINWEIS: die resultierende Hash ist kein GUID:

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

Ich werde jedoch sagen - ich kann wirklich nicht einen guten Grund denken, dies zu tun!

Verwandte Themen