码迷,mamicode.com
首页 > 数据库 > 详细

SQL uniqueidentifier

时间:2018-04-23 11:13:28      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:sel   roo   UI   连接符   转换   date   eid   sql   cat   

在项目中遇到一个SQL的问题:

select n.RootId as NodeId,r.PLACE_NAME as Node,Count(n.RootId) as Count,c.Year,c.Month,c.Day,c.Hour from 
connection.Connection c
inner join location.Node n on n.NETBAR_WACODE = c.NETBAR_WACODE
and n.RootId is not null
inner join location.Node r on r.NETBAR_WACODE = n.RootId
where c.CreatedDate >= @StartDate and c.CreatedDate <= @EndDate
group by n.RootId,r.PLACE_NAME,c.Year,c.Month,c.Day,c.Hour
order by c.Year desc,c.Month desc,c.Day desc,c.Hour desc

以上SQL执行的时候,会报以下的错误信息:

Insufficient result space to convert uniqueidentifier value to char.

 

 

然后去查了下Uniqueidentifier的概念

发现Uniqueidentifier存储大小为16个字节,16个字节=32个字符,
然而一般我们的GUID: 52337445-56FD-456E-9AF4-F83CFC5C4016 的长度为36,它怎么存的下呢?

答案是:

GUID在存储的时候是不存储那四个连接号的,所以是36-4=32.而GUID的字符都是十六进制的,一个16进制用四位表示,一个字节8位,所以32 * 4 /8 =16字节,这是在数据存储层面的。
而查出来的GUID是根据数据加上连接符组成的特定“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”格式,所以字符数是36,这是表示层面的。

所以回到最上的SQL其实只是少了个转换而已,加上

Convert(varchar(36),n.RootId) as NodeId

即可,主要注意的是这边的Convert函数第一个参数定义的varchar必须是>=36的,不可以仅仅用varchar哦~

 

SQL uniqueidentifier

标签:sel   roo   UI   连接符   转换   date   eid   sql   cat   

原文地址:https://www.cnblogs.com/cn2018/p/8915641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!