Вопрос

Существует ли стандартный способ имитации создания таблицы в базе данных с помощью 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, для чего я и использовал его в прошлом. На самом деле он не выполняет оператор, но возвращает метаданные.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top