2016-11-08 93 views
1

這是一個簡單的問題。我在SQL Server中的兩個語句:爲什麼在SQL Server中將字符串強制轉換爲GUID時會出現錯誤?

Case 1) select cast('d8b673a9-816c-4f45-b446-158b3e65fb45' as uniqueidentifier) 

**Result in this case:** 

D8B673A9-816C-4F45-B446-158B3E65FB45 



Case 2) select cast('g448d9e5-1499-25dc-er45-254717c234g8' as uniqueidentifier) 

**Result in this case:** 

Conversion failed when converting from a character string to uniqueidentifier. 

正如你可以看到有明顯兩個GUID的沒有什麼區別..

+2

顯然不是,除了第二個包含'g'和'r',它們不是有效的十六進制數字,所以根本不是一個GUID,而是某個人在實驗室炮製的一些奇怪的東西。毫無疑問,有着邪惡的意圖。 –

+0

Uniqueindentifier只能包含十六進制值,這意味着AF和0-9 – Hackerman

+0

除了我以前的評論,所有的開玩笑都請注意,[GUID](https://en.wikipedia.org/wiki/Globally_unique_identifier)是一個集合以特定方式生成的128位,以確保它們是唯一的。您可以*不*通過串聯字母和數字的任何舊組合來創建有效的GUID,即使它們碰巧都是十六進制的。所以除非你通過試驗獲得第二個GUID類型的字符串,否則不要使用生成中生成的任何算法。在SQL中,僅使用「NEWID()」或「NEWSEQUENTIALID()」。 –

回答

2

一個GUID不應該包含'r''g',只有十六進制數字,這就是爲什麼你的第二個字符串不會投。

見信息在這裏:

https://en.wikipedia.org/wiki/Hexadecimal

在數學和計算,十六進制(也底座16,或者十六進制)是用基數,或爲基的定位標記系統,16.它使用十六個不同的符號,最常見的符號0-9表示值爲零至九,以及A,B,C,D,E,F(或者a,b,c,d,e,f)十五。

相關問題