meimeibj 发表于 2008-3-25 11:16:25

procedure中使用临时表的问题,已解决,可供大家参考。

<p><font face="Verdana">li_xqjs = ds_xqjs.retrieve(left(sdate,6),left(u_sdate,6),left(u_edate,6))<br/>li_xqjs = ds_xqjs.retrieve(left(sdate,6),left(u_sdate,6),left(u_edate,6))</font></p>
<p>&nbsp;</p>
<p>上面的语句我写一次他不执行,重复写两次就执行了,为啥阿?</p>
<p>&nbsp;</p>
[此贴子已经被作者于2008-3-25 12:47:05编辑过]

meimeibj 发表于 2008-3-25 12:45:40

<div class="t_msgfont" id="message5363874">我自己查到原因了,是procedure临时表的关系。</div>
<div class="t_msgfont">&nbsp;</div>
<div class="t_msgfont">select into可以在事务中使用,但是前提条件是这个事务只有select into一条语句。<br/>SELECT INTO command not allowed within multi-statement transaction.&nbsp;&nbsp;<br/>注意是multi-statement transaction<br/>大家都知道,select into #tabel的最大优势是速度快,但这个速度快是用不记录日志来实现的。<br/>而使用事务的目的就是要么事务中的所有操作全部执行,要么所有操作全部回滚。<br/>这是靠日志中记录的操作来保证的。<br/>如果select into可以在多语句的事务中使用,但是它本身又是不计日志的,也就是不能回滚的。<br/>这就和事务的定义矛盾了。<br/>因此,select into不能在多语句的事务中使用。<br/>但也不是说我们不能使用select into这个好东东,set chained off,使用非链式事务或者把select into<br/>放在单独一个事务中运行就可以了。<br/>还有一个在多语句事务中被禁止的,而在应用中会常需要的命令是truncate table。<br/>原因和解决方法也如上所说。</div>

meimeibj 发表于 2008-3-25 12:46:06

<p>解决方案:</p>
<p>问题解决,其实问题出在数据库的设置上,为了能正确执行存储过程,只需在调用存储过程前加一条语句:sqlca.autocommit=true &nbsp; <br/>&nbsp; 执行完成后修改回原状态:sqlca.autocommit=true</p>
页: [1]
查看完整版本: procedure中使用临时表的问题,已解决,可供大家参考。

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com