当前位置: 首页 > 面试题库 >

创建表,但是如果表已经存在则将其删除

华浩壤
2023-03-14
问题内容

我正在处理一个请求,其中我必须创建一个表来插入一些数据。因此,显然我将首先拥有一个删除表st。在创建圣之前
但是,当我第一次运行此程序(可以创建表之前)时,它将弹出一个错误,提示未创建表,然后从此处创建表和goe子。因此,每当有人第一次运行我的代码时,它将在放置表st上弹出此错误。有谁有更好的主意吗?

诸如“如果表存在则删除其他创建表”之类的东西,
我不确定我们如何在sql中做到这一点

删除表table_name; -------------->在这里它第一次抛出错误,说表不存在。

创建表table_name

{ 很快 };

顺便说一下,我在Teradata上工作,但是简单的sql逻辑会有所帮助。


问题答案:

您可以创建SYSDBA或有足够的其他管理员级别的用户拥有一个存储过程DROP TABLECREATE TABLE特权执行以下操作:

  1. 检查DBC.Tables以查看对象是否存在。
  2. 如果对象存在,请将其删除。
  3. 运行DDL以重新创建表: CREATE TABLE <TargetDB>.<TargetTable> AS <SourceDB>.<SourceTable> WITH DATA AND STATS;

您可以通过接受有关是否应将数据和/或统计信息复制到新表的附加参数来使其更加动态。

如果您使用的是BTEQ,则可以执行类似的操作(BTEQ命令语法可能略有偏离,但足够接近以便理解要点):

SELECT 1 
FROM DBC.TABLES 
WHERE DatabaseName = '<TargetDB>'
  AND TableName = '<TargetTable>'
  AND TableKind = 'T' /* Make sure it is in fact a table, not a view, macro etc */


.IF ACIVITYCOUNT = 0 THEN GOTO CreateNewTable;

DROP TABLE <TargetDB>.<TargetTable>;

.IF ERRORCODE = 3807 THEN GOTO CreateNewTable; /* Table dropped by another process? */
.IF ERRORCODE > 0 THEN .QUIT ERRORCODE; /* Unexpected error */

.LABEL CreateNewTable;

CREATE <TargetDB>.<TargetTable> AS <SourceDB>.<SourceTable> WITH DATA AND STATISTICS;


 类似资料:
  • 问题内容: 我很沮丧,我不知道该怎么做。 基本上,我只想创建一个表,但是如果它存在,则需要将其删除并重新创建,而不是将其截断,但是如果不存在,则可以创建它。 有人可以帮忙吗? 谢谢乔治 问题答案: 放在tablename您的发言之前。 该语句将删除该表(如果存在),但如果不存在则不会引发错误。

  • 问题内容: 我正在使用PostgreSQL,并且是SQL的初学者。我正在尝试从查询创建表,并且如果运行: 它工作正常。但是然后如果我添加“如果不存在”并运行: 使用完全相同的查询,我得到: 有什么办法吗? 问题答案: CREATE TABLE AS被认为是与普通CREATE TABLE 分开的语句,并且 直到Postgres版本9.5 (请参阅changelog条目)不支持子句 为止 。(请务必查

  • 问题内容: 创建新表时遇到一些问题。当我使用CREATE TABLE命令时,我的新表将按应有的形式出现,但是当我退出活动时,应用程序崩溃,并且在logcat中得到了一个表已经存在的信息。如果我使用CREATE TABLE IF NOT EXISTS不存在,则不会形成新表,而只是将新的数据行添加到上一个表中,并且不会崩溃。这有什么问题?我想添加没有它的表,让我已经存在,并且我想要添加它而不向其他表添

  • 问题内容: 我有一个脚本,它使用DROP TABLE IF EXISTS删除表的负载,这可以工作。 此脚本中还有一个删除操作,用于从我不管理的另一个表中删除一行。该表可能存在或不存在。是否有任何在尝试删除行之前检查该表是否存在? 这需要适用于MYSQL和SQLServer 谢谢亚历克斯 问题答案: 要签入SQL SERVER, 要检查mysql: 您只需数:

  • 在对net进行研究之后,我猜想jaxb编译器再次尝试基于元素创建customer类,它已经基于元素所以我不想在解组时为permanentCustomer创建java对象,因为它已经在创建customer时创建了。 我能想到两个解决办法 1)maven-jaxb2-plugin插件的一些配置,如果java类已经生成,就不要重新生成,继续 是否存在任何配置?

  • 问题内容: 我正在尝试创建表(如果尚不存在)。我目前正在检查它是否首先存在,并且该查询是否不返回任何内容,然后插入。有没有一种方法可以只检查同一条语句,因此我不必将其分解为单独的查询? 这就是我目前所拥有的。 这是我要的东西。 问题是,您不能在语句中添加一个。 问题答案: 是的,Oracle没有该功能真是可惜。我敢肯定会有一天。在此之前,如果您想编写一个PL / SQL包装器,为什么不那样做: