使用 SQL 模拟表创建

发布于 2024-07-30 05:30:51 字数 85 浏览 4 评论 0原文

是否有标准方法可以使用 SQL 在数据库中模拟表创建? 我不想创建该表,只需检查是否可以创建它。 一种方法是创建它,然后再次删除它。 还有其他办法吗?

Is there a standard way to simulate a table creation in a database by using SQL? I don't want the table to be created, just check if it could be created.
One way would be to create it and then delete it again.
Any other way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

嘦怹 2024-08-06 05:30:51

一种基本方法 (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 语句更有用,这就是我过去使用它的目的。 它实际上并不执行该语句,而是返回元数据。

One basic method (SQL Server) is to use "SET FMTONLY ON".

Useful for checking the statement is valid, though won't tell you everything (e.g. if the table already exists).

This will succeed:

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

This will not:

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

This approach is probably more useful for SELECT statements, which is what I've used it for in the past. It doesn't actually execute the statement, but returns out the metadata.

梦醒灬来后我 2024-08-06 05:30:51

大多数主要服务器都支持事务性 DDL,因此您可以按照以下方式执行操作:

begin transaction

create table Foo ...

rollback transaction

理论上,如果出现错误,应该将其报告回客户端,但不会完全创建表。

Most major servers support transactional DDL, so you can do something along these lines:

begin transaction

create table Foo ...

rollback transaction

Theoretically, in case of error it should be reported back to client, but table will not be created altogether.

超可爱的懒熊 2024-08-06 05:30:51

取决于您感兴趣的 SQL DBMS。例如,Postgres 支持事务性 DDL,并且以下内容将起作用:

START TRANSACTION;
CREATE TABLE ... ();
<check for error here>
ROLLBACK;

Depends on the SQL DBMS you're interested in. For example Postgres supports transactional DDL and the following will work:

START TRANSACTION;
CREATE TABLE ... ();
<check for error here>
ROLLBACK;
墟烟 2024-08-06 05:30:51

如果您使用 MySQL,则可以使用瞬态存储引擎创建它,例如 内存

If you're using MySQL, you could create it using a transient storage engine, like MEMORY .

羁〃客ぐ 2024-08-06 05:30:51

实际上,您必须实际创建它以确保一切正常。

外键引用、用作默认值或检查约束或计算列中的函数直到执行时才会检查。

Really, you have to actually create it to make sure everything is OK.

Foreign key references, functions used as default or check constraints or in computed columns are not checked until execute time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文