T-SQL允许在存储过程中,建立临时表,但是不允许在用户自定义事务中,创建临时表。如果让我们了解一下PowerBuilder的事务处理机制,那么该问题的答案便一目了然。
PowerBuilder使用事务控制结构,例如SQLCA,连接数据库服务器SQL Server,事务控制结构有一个成员AUTOCOMMIT用于控制数据库操作事务。 AUTOCOMMIT是布尔类型,缺省情况下,其值为FALSE。当其值为FALSE时,应用应该使用PowerBuilder的事务管理命令CONNECT,COMMIT,和 DISCONNECT编写用户自定义事务。PowerBuilder发给服务器的T-SQL命令全部都是用户自定义事务。因此,这种情况下,执行建临时表的存储过程,应用出错。
如果将事务控制结构的AUTOCOMMIT置为TRUE,则PowerBuilder不对事务进行管理,只是将SQL语句送给服务器。SQL Server缺省情况下,除非用户自己定义事务,否则每条修改语句是一个事务。这种情况下,应用需要定义事务,就直接把“begin transaction”和“commit”语句,送给SQL Server。
所以,在PowerBuilder中,要正确执行建临时的存储过程,在调用之前,将AUTOCOMMIT置成TRUE,那么该存储过程就不在用户自定义事务中,和在 isql中测试一样,运行不会出错。
和这类似的情况还有,在PowerBuildr中,执行DDL命令,例如:建表,或者索引等等,都和AUTOCOMMIT有关。






