小编典典

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

sql

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

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

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

创建表table_name

{ 很快 };

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


阅读 464

收藏
2021-03-23

共1个答案

小编典典

您可以创建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;
2021-03-23