2012-11-14 52 views
0

我需要在觸發器中使用SQL Server GUID進行一些數學計算,並且難以找出如何將uniqueidentifier轉換爲numeric(38,0)如何在SQL Server中使用GUID進行數學計算

一個潛在的問題:我的理解是這兩種數據類型都是16字節的「整數」。如果我在這裏錯了,請糾正我。

否則,我將如何去做這個轉換?我已經試過CAST和CONVERT,並繼續獲取不允許將數據類型uniqueidentifier顯式轉換爲數字。作爲錯誤消息,每當我嘗試。我真的不想分析每個角色,並在UDF中執行十六進制數學來執行此操作。

這可能嗎?

這裏是我的腳本瑞普這個真正的快:

DECLARE @guid uniqueidentifier 
SET @guid = NEWID() 
DECLARE @a numeric(38,0) 
SET @a = 2 
PRINT CAST(@guid AS numeric(38,0)) -- fails 
PRINT @guid/@a -- also fails 
+0

答案必然「爲什麼」的問題是,我們錯過了一個要求(如從來沒有告訴它),但是可以用一個臨時的解決方案挽救的事情,直到我們可以回去和我們的下一個版本解決的事情。 – Jaxidian

+2

'UNIQUEIDENTIFIER'不是一個16字節的'INT'。 http://msdn.microsoft.com/en-us/library/ms187942.aspx – Lamak

+0

@Lamak盡我所知,'UNIQUEIDENTIFIER'是一個32個字符的十六進制數(最大值由16^32計算)。一個16字節的無符號整數將有一個由2 ^(16 * 8)計算的最大值。恰好發生2 ^(16 * 8)== 2^128 == 16^32。所以這兩種數據類型可以存儲相同數量的值。我只是試圖從一個轉換到另一個。這就是爲什麼我在原始問題中引用「整數」的原因。我從來沒有談過有關'INT'數據類型的任何內容,只是一個'數字(38,0)'數據類型。 – Jaxidian

回答

0

不幸的是,我沒有在一個VARCHAR無意中發現了一個轉換,從一個十六進制值,以很短的同時,通過一個數字環路的NUMERIC

declare @GUID as UniqueIdentifier = NewId() 
declare @Binary as VarBinary(64) = @GUID 
declare @String as VarChar(64) = Convert(VarChar(64), @Binary, 2) 

select @GUID as 'GUID', @Binary as 'Binary', @String as 'String'