Имитация создания таблицы с помощью SQL - PullRequest
0 голосов
/ 31 июля 2009

Существует ли стандартный способ имитации создания таблицы в базе данных с помощью SQL? Я не хочу, чтобы таблица создавалась, просто проверьте, может ли она быть создана. Один из способов - создать его, а затем снова удалить. Любой другой путь?

Ответы [ 5 ]

4 голосов
/ 31 июля 2009

Большинство крупных серверов поддерживают транзакционный DDL, поэтому вы можете сделать что-то вроде этого:

begin transaction

create table Foo ...

rollback transaction

Теоретически, в случае ошибки об этом следует сообщить клиенту, но таблица не будет создана вообще.

2 голосов
/ 31 июля 2009

Зависит от интересующей вас СУБД SQL. Например, Postgres поддерживает транзакционный DDL и будет работать следующее:

START TRANSACTION;
CREATE TABLE ... ();
<check for error here>
ROLLBACK;
0 голосов
/ 31 июля 2009

Одним из основных методов (SQL Server) является использование " SET FMTONLY ON ".

Полезно для проверки правильности выписки, хотя она не расскажет вам всего (например, если таблица уже существует).

Это удастся:

SET FMTONLY ON
EXECUTE ('CREATE TABLE SomeTable(SomeField INTEGER)')
SET FMTONLY OFF

Это не будет:

SET FMTONLY ON
EXECUTE ('CREATE TABLE SomeTable(dodgysyntax)')
SET FMTONLY OFF

Этот подход, вероятно, более полезен для операторов SELECT, для чего я и использовал его в прошлом. На самом деле он не выполняет оператор, но возвращает метаданные.

0 голосов
/ 31 июля 2009

На самом деле, вы должны создать его, чтобы убедиться, что все в порядке.

Ссылки на внешние ключи, функции, используемые по умолчанию или проверочные ограничения, или в вычисляемых столбцах не проверяются до времени выполнения.

0 голосов
/ 31 июля 2009

Если вы используете MySQL, вы можете создать его, используя механизм временного хранения, например MEMORY .

...