如何在SQL Server中删除N天以前的临时表
我们有100个进程正在创建临时表,而不是删除它们。许多构建都在生产中。我们希望SQL查询在N=2天后删除这些内容,并安排它。有办法吗?下面是从旧的临时表中迭代的示例代码,但是如果我运行它,它将无法删除这些表如何在SQL Server中删除N天以前的临时表,sql,sql-server,optimization,temp-tables,Sql,Sql Server,Optimization,Temp Tables,我们有100个进程正在创建临时表,而不是删除它们。许多构建都在生产中。我们希望SQL查询在N=2天后删除这些内容,并安排它。有办法吗?下面是从旧的临时表中迭代的示例代码,但是如果我运行它,它将无法删除这些表 USE tempdb; DECLARE @SQL VARCHAR(MAX) set @SQL = ( SELECT STUFF( ( SELECT ' DROP TABLE ' + cast(name as varchar(200))
USE tempdb;
DECLARE @SQL VARCHAR(MAX)
set @SQL =
(
SELECT STUFF(
(
SELECT ' DROP TABLE ' + cast(name as varchar(200))
FROM tempdb.sys.tables where create_date < '2019-12-10 00:00:00.000'
FOR XML PATH('')
),1, 1, '')
);
PRINT @SQL;
当连接关闭并回收时,引擎会丢弃一个临时表 因此,我们不需要删除表,因为它可以由引擎本身自动完成。但是,作为一种最佳实践,手动删除创建该表的脚本中的表将有助于Sql server决定垃圾收集 请查看以下最新版本的SQL Server
您的示例代码是否在固定日期有效?你可以添加一些像DATEADDd,-2,GETADATE这样的东西,让它充满活力,兄弟!这意味着:在编写代码时,千万不要假设或暗示任何东西。temp和temp表在tempdb中结束,但它们是由SQL Server管理和处理的。在tempdb中创建自己的表与创建temp表不同。不要那样做。@Nick.McDermaid我已经编辑了问题的正确性。而且它不适用于较旧的临时表。甚至SA用户对tempdb的访问也被拒绝。