我正在研究Java项目,其中我正在使用 Sybase和Apache Metamodel 获取表数据及其信息。现在“ ddl in tran ”选项为true,但是当我使用Apache Metamodel获取列详细信息时,仍然出现错误:
com.sybase.jdbc4.jdbc.SybSQLException:'tempdb'数据库中的多语句事务中不允许使用'CREATE TABLE'命令。
我在Windows 10上安装了Sybase ASE 15.5。
答案 0 :(得分:2)
在临时数据库中,“ ddl in tran”选项也必须处于“ on”状态。系统管理员或具有sa_role的人员可以执行以下操作:
1> use master
2> go
1> sp_dboption tempdb, 'ddl in tran', 'true'
2> go
Warning: Attempting to change database options for a temporary database. Database options must be kept consistent across all temporary databases.
Database option 'ddl in tran' turned ON for database 'tempdb'.
Running CHECKPOINT on database 'tempdb' for option 'ddl in tran' to take effect.
(return status = 0)
如警告所示,如果您有多个临时数据库,则这必须在所有临时数据库中保持一致。命令完成后,可以使用sp_helpdb来检查选项:
1> sp_helpdb
2> go
[stuff deleted]
tempdb 104.0 MB sa 2 Aug 05, 2019 no_recovery 0 NULL
select into/bulkcopy/pllsort, trunc log on chkpt, ddl in tran, mixed log and data, allow wide dol rows
下面是在事务内创建表的示例:
1> use tempdb
2> go
1> begin tran
2> go
1> create table foo ( k int not null, value varchar(25) null)
2> go
1> commit
2> go
1>
答案 1 :(得分:0)
可以使用它(sp_dboption tempdb,'ddl in tran','true'),但是将其设置为true不是一个好习惯,因为它可能会导致tempdb中的并发问题。
使用该选项时一定要小心。