如果表已存在,则创建表但删除它

use*_*117 4 sql create-table teradata drop-table

我正在处理一个请求,我必须创建一个表来插入一些数据.所以,显然我将首先拥有一个删除表.在创建st之前 但是当我第一次运行它时(在创建表之前),它会弹出一个错误,表示没有创建表,然后从这里创建表和goe son.所以每次第一次运行我的代码时,它都会在drop table st中弹出这个错误.有没有人有更好的主意?

像"如果表存在然后删除其他创建表"之类的东西
我不知道我们将如何在sql中执行此操作

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

创建表table_name

{等等};

顺便说一句,我正在研究Teradata,但简单的SQL逻辑会有所帮助.

Rob*_*ler 10

您可以创建SYSDBA或有足够的其他管理员级别的用户拥有一个存储过程DROP TABLE,并CREATE 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;
Run Code Online (Sandbox Code Playgroud)