Sql 红移:截断表(如果存在)
使用Sql 红移:截断表(如果存在),sql,amazon-redshift,truncate,drop-table,Sql,Amazon Redshift,Truncate,Drop Table,使用TRUNCATE TABLE而不是DELETE。但是,truncate table不支持IF EXISTS子句。另一种方法是删除表并重新创建,但需要DDL。如果只有表存在,是否有方法执行截断表?您有两个选项来实现它: SQL过程/脚本 使用IF条件,检查表是否存在,然后只截断表。 使用普通SQL语句 使用Create表和如果不存在以及Truncate,这将确保表始终存在&您的连续SQL语句不会出错并停止 CREATE TABLE @tobetruncated IF NOT EXISTS T
TRUNCATE TABLE
而不是DELETE
。但是,truncate table不支持IF EXISTS
子句。另一种方法是删除表
并重新创建,但需要DDL。如果只有表存在,是否有方法执行截断表?您有两个选项来实现它:
SQL过程/脚本
使用IF
条件,检查表是否存在,然后只截断表。
使用普通SQL语句
使用Create
表和如果不存在
以及Truncate
,这将确保表始终存在&您的连续SQL语句不会出错并停止
CREATE TABLE @tobetruncated IF NOT EXISTS
TRUNCATE TABLE @tobetruncated
注意:这并不特定于REDSHFIT,主要适用于所有DB,除非它支持特殊功能(比如我知道Oracle有一个表\u EXISTS\u ACTION
)。Truncate就像一个全有或全无操作,这使得它的性能比DELETE好得多
我对红移一无所知,但我想看看SQL中的try-catch-end-catch…即使运行TRUNCATE
,也会产生错误,您对它有什么问题吗?或者这会阻止脚本运行吗?另外,为什么您认为该表可能不存在?如果它不存在,你无论如何也不能用它做任何事情,所以你的脚本也会失败!