SQL笔记 - 解决CTE定位点类型和递归部分的类型不匹配
2014-01-11 22:05
375 查看
在CTE递归测试,也就是部门名称拼接的时候,遇到了小问题:
登时就迷糊了:不都是取的是Unit表中的同一个列,相加之后类型就变了么?
难道是因为,系统知道这是在进行递归运算,但又不确定递归的层次,以及字符串连接后的长度,于是把这个字符串的长度预设为很大很大的。
但是第一个例子中的Level也进行了运算,为什么就不需要显示转换类型?
这是因为递归也不是无限递归的,也是有层次限制的:
【在测试递归查询的结果时,可以通过在 INSERT、UPDATE、DELETE 或 SELECT 语句的 OPTION 子句中使用 MAXRECURSION 提示和 0 到 32,767 之间的值,来限制特定语句允许的递归级数。】
而int 足够了:(目测是int类型,因为var num=1, 默认的类型就是int)
Int:从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节
Int类型猜测正确, 但为什么错误提示是:溢出,而不是更多字节的bigint?
前面不是说了么:数值的默认类型是int,一旦确定就不会再改变。(而且这个环境还没有智能到,根据所赋的值的大小,或者要进行的加减乘除的运算,自动匹配到最合适的类型。)于是乎,我茅塞顿开:字符串进行运算的时候,也是有默认类型的(Set是内置了转换的)下面就是验证:
所以这个问题就是CTE递归时,Union运算要求同结构,同类型; 而运算后的默认类型和自定义的类型不一致, 显示转换下就OK了, 选择哪种转换方式, 看具体需求。
参考:
http://bbs.csdn.net/topics/290079093
http://technet.microsoft.com/zh-cn/library/ms186243(v=sql.105).aspx
登时就迷糊了:不都是取的是Unit表中的同一个列,相加之后类型就变了么?
难道是因为,系统知道这是在进行递归运算,但又不确定递归的层次,以及字符串连接后的长度,于是把这个字符串的长度预设为很大很大的。
但是第一个例子中的Level也进行了运算,为什么就不需要显示转换类型?
这是因为递归也不是无限递归的,也是有层次限制的:
【在测试递归查询的结果时,可以通过在 INSERT、UPDATE、DELETE 或 SELECT 语句的 OPTION 子句中使用 MAXRECURSION 提示和 0 到 32,767 之间的值,来限制特定语句允许的递归级数。】
而int 足够了:(目测是int类型,因为var num=1, 默认的类型就是int)
Int:从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节
Int类型猜测正确, 但为什么错误提示是:溢出,而不是更多字节的bigint?
前面不是说了么:数值的默认类型是int,一旦确定就不会再改变。(而且这个环境还没有智能到,根据所赋的值的大小,或者要进行的加减乘除的运算,自动匹配到最合适的类型。)于是乎,我茅塞顿开:字符串进行运算的时候,也是有默认类型的(Set是内置了转换的)下面就是验证:
所以这个问题就是CTE递归时,Union运算要求同结构,同类型; 而运算后的默认类型和自定义的类型不一致, 显示转换下就OK了, 选择哪种转换方式, 看具体需求。
参考:
http://bbs.csdn.net/topics/290079093
http://technet.microsoft.com/zh-cn/library/ms186243(v=sql.105).aspx
相关文章推荐
- 定位点类型和递归部分的类型不匹配,如何解决?
- SQL笔记 - CTE递归实例:显示部门全称
- 在mysql存储过程中拼接sql解决in的字段类型不匹配问题
- SQL笔记 - CTE递归实例(续):显示指定部门的全称
- sqlserver text类型字段错误 net.sourceforge.jtds.jdbc.ClobImpl@66fa192的解决方法
- Sql plus命令报command not found的解决笔记
- SQl笔记第三部分(PL_SQL)
- 搭建.net开发环境,vs自带的sql server express部分问题的解决办法
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- Java基础知识强化之IO流笔记12:递归之递归解决问题的思想(图解)
- AIX 部分故障的判断、定位、解决方法手册
- SQLServer CTE递归
- 关于 “不允许从数据类型 sql_variant 到 uniqueidentifier 的隐式转换。请使用 CONVERT 函数来运行此查询“的最终解决
- SQL Server 2005 T-SQL 学习笔记:新数据类型
- 解决异常“SqlParameterCollection 只接受非空的 SqlParameter 类型对象。”
- c51里面的部分数据类型 自己做个笔记
- PL/SQL学习笔记-变量作用域及数据类型深入
- SQLServer\framework启动报异常:Module的类型初始值设定项引发异常 [转]QQ空间、新浪微博、腾讯微博等一键分享API链接代码 window下 mongodb快速安装 数据表查询所有子/父节点 C#学习笔记1
- 解决cin输入类型不匹配的问题
- T-SQL with as 的用法(转) SQL 下的递归查询 SQL2005(CTE) ,SQL2000(Function 递归)