select*from在自定义函数(视图)中的特殊问题
2015-11-23 10:37
316 查看
1、提出问题
在自定义表值函数中,如果有返回select * from的情况 这个时候如果修改表结构,如添加表的字段表值函数的返回值就会和实际值不相同。修改前表结构
修改前表的数据
自定义表值函数
修改表结构前搜索结果
修改后表结构
修改表结构后的查询结果
2、分析问题
如上图,大家可以看到自定义函数查询结果的ttt列结果不对了变成了createdate列的结果,而createdate列没有了。
个人推测是自定义函数编译的时候自动会把select * from 解析成具体的列,并且保存,但是查询语句还是直接保存。
所以当表结构表的时候按照列的数组取匹配了,这样就会出现上图的问题,第一列匹配第一列,第n列匹配第n列,
ttt列匹配成添加的列createdate。而原来的ttt 就变成不显示了。
从上面可以看出,视图中
3、解决问题:
1、我认为避免的最好办法是不用Select *2、重新编译自定义函数
3、如果可以,重新生成自定义函数的列(已确认见后面订正内容)--
--订正内容 12:51
从上图中可以看到修改表结构后,自定义函数的列没有修改,验证了我的猜测。
解决办法3 - 重新编译
我自己写了一个重新编译的SQL修改后执行的sql:
因为有修改所以CreateDate现在变成了NuLL
但是结果是正确的了。、
总结:
根据上面的实验,可以得出:
1、视图里面尽可能不要出现*号。*号不仅对性能有影响,也不便于结构的更新。
2、无论视图所涉及的表结构有无修改,每次执行脚本后,刷新一下,总是好的。
相关文章推荐
- Quartz使用示例总结
- 九度OJ 1345:XXX定律之画X (递归)
- 完美屏蔽ViewPager的滑动
- py2exe——.py文件转换成exe
- C++ 命名空间解释
- 九度OJ 1345:XXX定律之画X (递归)
- 10大的 Metro 风格的 Bootstrap 主题和模板
- Windows常用命令
- 编程中巧用“Alt+数字”输出特殊符号
- 按钮背景颜色
- linux设备模型之总线,设备,驱动模型
- 不能小瞧的数组——数组用法的挖掘
- WebService工作原理
- Google Guava官方教程(中文版)
- hdu5569/#63 (div.2) 1003
- 利用接口回调实现Fragment之间的跳转
- JSTL标签 参考手册(手动整理)
- Netlink技术-在Linux 下用户空间与内核空间数据交换的方式
- linux查找文件
- 机器学习之三:logistic回归(最优化)