select*from在自定义函数(视图)中的特殊问题

来源:未知 责任编辑:责任编辑 发表时间:2015-01-01 13:17 点击:

1、提出问题
在自定义表值函数中,如果有返回select * from的情况 这个时候如果修改表结构,
如添加表的字段表值函数的返回值就会和实际值不相同。
修改前表结构  www.2cto.com  


 
修改前表的数据


 
自定义表值函数


 
修改表结构前搜索结果

 
修改后表结构


 
修改表结构后的查询结果


 
2、分析问题
如上图,大家可以看到自定义函数查询结果的ttt列结果不对了
变成了createdate列的结果,而createdate列没有了。
个人推测是自定义函数编译的时候自动会把select * from 解析成具体的列,并且保存,
但是查询语句还是直接保存。
所以当表结构表的时候按照列的数组取匹配了,这样就会出现上图的问题,第一列匹配第一列,
第n列匹配第n列,
ttt列匹配成添加的列createdate。而原来的ttt 就变成不显示了。

 
3、解决问题:
1、我认为避免的最好办法是不用Select *
2、重新编译自定义函数  www.2cto.com  
3、如果可以,重新生成自定义函数的列(已确认见后面订正内容)--
 
--订正内容 12:51


 
从上图中可以看到修改表结构后,自定义函数的列没有修改,验证了我的猜测。
解决办法3 - 重新编译
我自己写了一个重新编译的SQL


 
修改后执行的sql:


 
因为有修改所以CreateDate现在变成了NuLL
但是结果是正确的了。
 
 
 
作者 Tom.汤
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • sql常见面试题
    • SQL SERVER 2005性能之跟踪
    • SQL编程(一)
    • LINUX上RMAN自动备份脚本
    • sql server面试题
    • 如何将多个SQL查询统计结果一次显示出来
    • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
    • SQL小技巧系列 --- 行转列合并
    • sql server 列转行
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1