2012-03-28 9 views
-2

私は自動生成ID(ID列)を持つ1つのテーブルを持っています この値は@@ identityを使用して取得します。これを一意の識別子に変換できますか?@@ IDENTITYをSQLのuniqueidentifierに変換します

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は、現在のセッションの最後のIDを返します(INSERT,SELECT INTO、またはbulk copyステートメントから)。

uniqueidentifier列をID列として設定することはできません。これはSQL Serverではサポートされていません。そのため、実際にINTアイデンティティを何らかのハッシュに変換しようとしない限り、あなたの質問は意味をなさないでしょうか?

ほとんどあなたが行うことができますが、それをハッシュ(の真にIsIdentity設定した整数ID列を言うことができます)、インサートから@@IDENTITYを取るです - 注:結果のハッシュは、GUIDされていません。

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

しかし私は言うでしょう - 私は本当にこれを行うには良い理由を考えることができません!

関連する問題