Имитация создания таблицы с помощью SQL
Вопрос
Существует ли стандартный способ имитации создания таблицы в базе данных с помощью SQL? Я не хочу, чтобы таблица создавалась, просто проверьте, может ли она быть создана. Один из способов - создать его, а затем снова удалить. Любой другой путь?
Решение
Большинство крупных серверов поддерживают транзакционный DDL, поэтому вы можете сделать что-то вроде этого:
begin transaction
create table Foo ...
rollback transaction
Теоретически, в случае ошибки она должна быть возвращена клиенту, но таблица не будет создана вообще.
Другие советы
Зависит от интересующей вас СУБД SQL. Например, Postgres поддерживает транзакционный DDL, и будет работать следующее:
START TRANSACTION;
CREATE TABLE ... ();
<check for error here>
ROLLBACK;
Если вы используете MySQL, вы можете создать его с использованием механизма временного хранения, например, ПАМЯТЬ .
На самом деле, вы должны создать его, чтобы убедиться, что все в порядке.
Ссылки на внешние ключи, функции, используемые по умолчанию или проверочные ограничения или в вычисляемых столбцах, не проверяются до времени выполнения.
Одним из основных методов (SQL Server) является использование УСТАНОВИТЬ FMTONLY ON & Quot;. р>
Полезно для проверки правильности утверждения, но оно не расскажет вам всего (например, если таблица уже существует).
Это будет успешно:
SET FMTONLY ON
EXECUTE ('CREATE TABLE SomeTable(SomeField INTEGER)')
SET FMTONLY OFF
Это не будет:
SET FMTONLY ON
EXECUTE ('CREATE TABLE SomeTable(dodgysyntax)')
SET FMTONLY OFF
Этот подход, вероятно, более полезен для операторов SELECT, для чего я и использовал его в прошлом. На самом деле он не выполняет оператор, но возвращает метаданные.