有没有一种方法可以创建一个每次在SQL中重写自身的临时表

有没有一种方法可以创建一个每次在SQL中重写自身的临时表,sql,sql-server,Sql,Sql Server,我有一个查询,将数据加载到临时表中,然后检索它。当我再次尝试运行查询时,是否有方法使我的临时表重写自身,而不是遇到已经存在的试探性名称问题?提前感谢。查看临时表是否已经存在,并在每次运行脚本时删除它,然后再加载数据 IF OBJECT_ID('dbo.temp_table','U') IS NOT NULL DROP TABLE dbo.temp_table GO /* your script here --the table can be re-created using SELECT

我有一个查询,将数据加载到临时表中,然后检索它。当我再次尝试运行查询时,是否有方法使我的临时表重写自身,而不是遇到已经存在的试探性名称问题?提前感谢。

查看临时表是否已经存在,并在每次运行脚本时删除它,然后再加载数据

IF OBJECT_ID('dbo.temp_table','U') IS NOT NULL 
DROP TABLE dbo.temp_table
GO
/*
 your script here
 --the table can be re-created using SELECT ... INTO
*/

查看临时表是否已经存在,并在每次运行脚本时删除它,然后再加载数据

IF OBJECT_ID('dbo.temp_table','U') IS NOT NULL 
DROP TABLE dbo.temp_table
GO
/*
 your script here
 --the table can be re-created using SELECT ... INTO
*/

在脚本中删除临时表也有一个合理的理由。理论上,SQL Server会在表脱离上下文时删除该表。实际上,这样做并没有什么坏处,它可以(但并非总是)加快垃圾收集过程。我通常也会在脚本的顶部进行检查,尽管不是在过程的顶部

如果OBJECT_IDN'tempdb..temp_table',N'U'不为空 升降台温度表; 去 创建表temp_TABLE[field][int]; -使用临时表格 如果OBJECT_IDN'tempdb..temp_table',N'U'不为空 升降台温度表;
GO

在脚本中删除临时表也有一个合理的理由。理论上,SQL Server会在表脱离上下文时删除该表。实际上,这样做并没有什么坏处,它可以(但并非总是)加快垃圾收集过程。我通常也会在脚本的顶部进行检查,尽管不是在过程的顶部

如果OBJECT_IDN'tempdb..temp_table',N'U'不为空 升降台温度表; 去 创建表temp_TABLE[field][int]; -使用临时表格 如果OBJECT_IDN'tempdb..temp_table',N'U'不为空 升降台温度表;
去吧

也许值得考虑一下。如果运行的是较新版本的SQL Server,则性能可能与临时表相当

来自上面链接的示例

declare @TableVar table (   NewPK int identity(1,1),    CustomerID nchar(5) NOT NULL  )

Insert Into @TableVar (CustomerID) Select   CustomerID From Customers

Select  Top 5 * from    @TableVar

也许值得考虑一个新的选择。如果运行的是较新版本的SQL Server,则性能可能与临时表相当

来自上面链接的示例

declare @TableVar table (   NewPK int identity(1,1),    CustomerID nchar(5) NOT NULL  )

Insert Into @TableVar (CustomerID) Select   CustomerID From Customers

Select  Top 5 * from    @TableVar

您可以改用表变量。主要缺点是必须定义结构;您不能使用选择。。。进入以创建表变量。您必须声明表结构并使用INSERT INTO。。。选择:


您可以改用表变量。主要缺点是必须定义结构;您不能使用选择。。。进入以创建表变量。您必须声明表结构并使用INSERT INTO。。。选择:


不要尝试使用这样的临时表-如果同时运行查询不止一次,会发生什么情况?你不会希望它通过核爆炸而崩溃…如果临时表不是全局临时表,那么你应该能够在多个会话中运行它,而不会受到外部影响。问题不清楚或者太复杂了!顺便问一下,你的意思是覆盖还是覆盖?如果您的意思是覆盖,则在创建表时不存在覆盖,您需要删除并创建表,或者假设它存在,您应该使用它。不要尝试使用这样的临时表-如果同时运行查询不止一次,会发生什么情况?你不会希望它通过核爆炸而崩溃…如果临时表不是全局临时表,那么你应该能够在多个会话中运行它,而不会受到外部影响。问题不清楚或者太复杂了!顺便问一下,你的意思是覆盖还是覆盖?若您的意思是覆盖,那个么在创建表时并没有覆盖,您需要删除并创建它,或者假设它存在,您应该使用它。