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