2016-11-08 30 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)十五。

相关问题