删除临时表(如果存在)
Posted
技术标签:
【中文标题】删除临时表(如果存在)【英文标题】:Drop a temporary table if it exists 【发布时间】:2011-11-07 17:26:01 【问题描述】:我在 SQL 中有两行代码可以即时创建两个表,我需要做一些类似的事情
IF TABLE EXISTS
DROP IT AND CREATE IT AGAIN
ELSE
CREATE IT
我的台词如下
CREATE TABLE ##CLIENTS_KEYWORD(client_id int)
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)
如何在我的过程中为这两个表应用这个概念?
【问题讨论】:
What's the best way to determine if a temporary table exists in SQL Server?的可能重复 check if temp table exist and delete if it exists before creating a temp table的可能重复 【参考方案1】:从 SQL Server 2016 开始,您可以使用
DROP TABLE IF EXISTS ##CLIENTS_KEYWORD
您可以在以前的版本中使用
IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE ##CLIENTS_KEYWORD
CREATE TABLE ##CLIENTS_KEYWORD
(
client_id INT
)
您也可以考虑截断表格而不是删除并重新创建。
IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
TRUNCATE TABLE ##CLIENTS_KEYWORD
ELSE
CREATE TABLE ##CLIENTS_KEYWORD
(
client_id INT
)
【讨论】:
你也可以在这个方法下面发布截断,它可能对我有更好的帮助:)谢谢 嗯,由于某种原因,当我执行它时,它说 ##CLIENTS_KEYWORD 是无效的对象名称 @user - 你使用的是什么版本的 SQL Server?我在 SQL Server 2008 上并且(我想我)测试了表存在和不存在的情况。它可能需要将 create 包装在EXEC
中,这样解析器就不会抱怨以前的版本。即使用EXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
+1 用于OBJECT_ID IS NULL
而不是tempdb.sys.tables
查询。
@TobySpeight - 问题是关于临时表的。这些观点中的大多数与此相关性有限。【参考方案2】:
通过检索其 object_id 来检查是否存在:
if object_id('tempdb..##clients_keyword') is not null
drop table ##clients_keyword
【讨论】:
【参考方案3】:你要求的是:
IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD') IS NOT NULL
BEGIN
DROP TABLE ##CLIENTS_KEYWORD
CREATE TABLE ##CLIENTS_KEYWORD(client_id int)
END
ELSE
CREATE TABLE ##CLIENTS_KEYWORD(client_id int)
IF OBJECT_ID('tempdb..##TEMP_CLIENTS_KEYWORD') IS NOT NULL
BEGIN
DROP TABLE ##TEMP_CLIENTS_KEYWORD
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)
END
ELSE
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)
因为你总是要创建表,不管表是否被删除;稍微优化的解决方案是:
IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD') IS NOT NULL
DROP TABLE ##CLIENTS_KEYWORD
CREATE TABLE ##CLIENTS_KEYWORD(client_id int)
IF OBJECT_ID('tempdb..##TEMP_CLIENTS_KEYWORD') IS NOT NULL
DROP TABLE ##TEMP_CLIENTS_KEYWORD
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)
【讨论】:
以上是关于删除临时表(如果存在)的主要内容,如果未能解决你的问题,请参考以下文章