SQL Server:批处理执行CREATE SCHEMA和CREATE TABLE时,关键字'CREATE'附近的语法

时间:2011-02-19 14:18:44

标签: sql-server syntax jdbc batch-file

我正在尝试使用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。

任何建议表示赞赏,谢谢!

米。

1 个答案:

答案 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一个电话。