2012-08-03 78 views
1

我正在嘗試解決與Convert from UniqueIdentifier to BigInt and Back?非常相似的問題。不幸的是,該示例沒有顯示整個過程,它僅顯示將GUID轉換回BIGINT。SQL Server 2008從BIGINT轉換爲UNIQUEIDENTIFIER/GUID並返回

我將這稱爲一個假設的問題,因爲我已經決定將整數存儲爲GUID不是很有益。然而在這一點上,我只是想知道爲什麼轉換過程不起作用。

一切看起來都很好,直到第5步....

SELECT 1 AS Step 
     ,100966116980299 

SELECT 2 AS Step 
     ,CONVERT(VARBINARY(8), 100966116980299, 1) 

SELECT 3 AS Step 
     ,CONVERT(UNIQUEIDENTIFIER, 
      CONVERT(VARBINARY(8), 100966116980299, 1) 
     ) 

SELECT 4 AS Step 
     ,CONVERT(VARBINARY(8), 
      CONVERT(UNIQUEIDENTIFIER, 
       CONVERT(VARBINARY(8), 100966116980299, 1) 
      ), 1 
     ) 

SELECT 5 AS Step 
     ,CONVERT(BIGINT, 
      CONVERT(VARBINARY(8), 
       CONVERT(UNIQUEIDENTIFIER, 
        CONVERT(VARBINARY(8), 100966116980299, 1) 
       ), 1 
      ) 
     ) 

結果

Step Value 
1  100966116980299 
2  0x0F0000014B768901 
3  0100000F-764B-0189-0000-000000000000 
4  0x0F0000014B768901 
5  1080863916129945857 

回答

3

我覺得這裏的問題是,你正在使用的值100966116980299不被理解作爲BIGINT在第一位。看看會發生什麼,如果你第一次做了一個顯式的BIGINT

SELECT 1 AS Step 
     ,CAST(100966116980299 AS BIGINT) 

SELECT 2 AS Step 
     ,CONVERT(VARBINARY(8), CAST(100966116980299 AS BIGINT), 1) 

SELECT 3 AS Step 
     ,CONVERT(UNIQUEIDENTIFIER, 
      CONVERT(VARBINARY(8), CAST(100966116980299 AS BIGINT), 1) 
     ) 

SELECT 4 AS Step 
     ,CONVERT(VARBINARY(8), 
      CONVERT(UNIQUEIDENTIFIER, 
       CONVERT(VARBINARY(8), CAST(100966116980299 AS BIGINT), 1) 
      ), 1 
     ) 

SELECT 5 AS Step 
     ,CONVERT(BIGINT, 
      CONVERT(VARBINARY(8), 
       CONVERT(UNIQUEIDENTIFIER, 
        CONVERT(VARBINARY(8), CAST(100966116980299 AS BIGINT), 1) 
       ), 1 
      ) 
     ) 

結果

Step Value 
1  100966116980299 
2  0x00005BD40189764B 
3  D45B0000-8901-4B76-0000-000000000000 
4  0x00005BD40189764B 
5  100966116980299 
+0

尼斯漁獲物。在我嘗試過的所有變化中,我沒有考慮CAST數字本身 – 2012-08-03 20:37:54

相關問題