我正在尝试使用JDBC(最新版本)设置SQL Server 2008数据库。 我有一个setup命令列表,我想一起执行:
基本上我所做的是:
connection.setAutoCommit(true);
stmt = connection.createStatement();
stmt.addBatch("CREATE SCHEMA test")
stmt.addBatch("CREATE TABLE test.a (x integer)")
stmt.executeBatch();
这引发:
Incorrect syntax near the keyword 'CREATE'.
如果我单独执行这些命令,它们会按预期工作。我是否需要在此处添加提交(例如stmt.addBatch(“COMMIT”)?我没有运行事务,所以这不是必需的。
这也不是错误,说测试架构不存在 - 这是一个语法错误,这让我很困惑。
文档仅提供DML命令作为addBatch的示例,但我相信批量不仅限于DML。
任何建议表示赞赏,谢谢!
米。
答案 0 :(得分:2)
这是有效的SQL
CREATE SCHEMA test
CREATE TABLE test.a (x integer)
这是有效的
CREATE SCHEMA test
GO
CREATE TABLE test.a (x integer)
这是无效的
CREATE SCHEMA test;
CREATE TABLE test.a (x integer);
错误是
Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'create'.
原因是create schema
必须在它自己的批次中(感谢Ben指出这一点)。 GO
是批处理分隔符,这样就可以了。 ;
是批处理中的语句分隔符,这是不正常的。第一个代码有效,因为create table
语句是create schema
语句的一部分。它们与一个语句在同一个事务中运行。
我的猜测是addBatch
在每个语句的末尾追加;
。只需使用包含addBatch
的整个create schema
语句拨打create table
一个电话。