SQL Server: синтаксис рядом с ключевым словом «CREATE» при пакетном выполнении CREATE SCHEMA и CREATE TABLE - PullRequest
2 голосов
/ 19 февраля 2011

Я пытаюсь настроить базу данных SQL Server 2008 с использованием JDBC (последняя версия). У меня есть список команд установки sql, которые я хотел бы выполнить все вместе:

В основном я делаю следующее:

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 Ответ

2 голосов
/ 19 февраля 2011

Это действительный 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 должен быть в его собственной партии (Спасибо, Бен, что указал на это). GO - это пакетный разделитель, так что все в порядке. ; - разделитель операторов в пакете, и это не так. Первый код действителен, потому что оператор create table является частью оператора create schema. Они выполняются в той же транзакции, что и один оператор.

Я предполагаю, что addBatch добавляет ; в конце каждого оператора. Сделайте только один звонок на addBatch с полным оператором create schema, включая create table.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...