te:037e855e55]
起始昨天我就试过不行,为了确认,今日有测试了一次,还是不行的。
起始手册中说可以recompile,也许只是优化了某一部分,并不能解决我们这里提到的问题
joey 回复于:2003-09-17 11:53:39
评为精华了,
提点小小意见,这是我自己写的,不是zt的.
放到原创精华更合适的
chenfeng825 回复于:2003-09-17 11:59:01
不要太贪心,呵呵。鼓励原创!
qjhadm 回复于:2003-09-17 13:06:13
确实不错.对待这样一个小问题做如此深刻的分析,精神另我佩服
solofeng 回复于:2003-09-17 19:34:32
呵呵joey 比我强,上次我也是由于sp_rename的问题导致我们数据库出现很大的问题,不过后来知道是没有讲存储过程recomplie,但是我没有做这么细致的分析?佩服
zhangyh123 回复于:2003-09-17 20:44:48
[quote:37dfb84738="Blackrose"]我坚信
sp_recompile 是会 导致对象重新编译的[/quote:37dfb84738]
我一般 只 sp_recompile table
从来没有使用 sp_recompile procedure
不过还有点怀疑,明天自己验证看看。
Eisen 回复于:2003-09-18 09:13:11
sp_recomplie后面只能跟 table的名字,不能针对某个procedure进行recompile的。
zhangyh123 回复于:2003-09-18 09:27:31
[size=18:ce847676a7]关于 在 存储过程中使用 select * from table 以及新增加字段后新列为什么不出现的问题,我这里给一个比较正确的认识:
在检查你的存储过程文本中,可以看到,任何
select * from table 在数据库保存并编译的时候,都被数据库编译器替换为
select col1,cole .....coln 的形式,被替换成具体的列名,新增加列后
新列名不会自动出现在这里
因此,新增加的列为什么 没有出来,原因就很清楚了。并不是重编译与否的问题,
我同意 blackrose 的看法 ,数据库存储过程肯定重新编译。
重新编译的对象应该是第一次数据库保存与编译时展开的数据库脚本,而不是开发人员写的 select * 因此 重新编译后并没有新列是很正常的,它只对展开列名
的sp 进行编译。
我认为缺失列的原因并不是楼主所说的原因(没有重新编译,而是编译的对象是什么!),请广大网友务必不要搞 混淆!
也请斑竹仔细检查,否则。。。
另外 这样的问题在 mssql 数据库不会出现,
在mssql 数据库中,编译器不会修改你select * from ...的语句中的 * 为具体的列名 因此 从这里可以看出, 从 mssql 移植程序到 sybase 的人要改变观念,屏气写 select * from 的陋习! [/size:ce847676a7]


joey 回复于:2003-09-18 13:36:13
同意zhangyh123 的解释
[quote:846b2a1bf2]任何
select * from table 在数据库保存并编译的时候,都被数据库编译器替换为
select col1,cole .....coln 的形式,被替换成具体的列名,新增加列后
新列名不会自动出现在这里
因此,新增加的列为什么 没有出来,原因就很清楚了。[/quote:846b2a1bf2]
我并非说这是重新编译导致的问题,而是说重新编译可以解决这些问题。
也就是说,只有重新编译,stored proc 才能刷新底层表发生的变化。
chenfeng825 回复于:2003-09-18 14:13:35
mssql也存在procedure 失效的问题。但具体没有深入测试了
pengxb 回复于:2003-09-18 14:23:24
据专家说:如果在创建proc时加上with compile选项,就不会出现这个奇怪的现象了
joey 回复于:2003-09-18 15:02:18
你指的是create proc ... with recompile吧,这个我也试过,不行。
emate 回复于:2003-11-12 21:41:29
偶用sybase也不很短时间了,可是真的还没"对象重新编译"呀 :(
上一页 [1] [2] |