【发布时间】:2022-01-04 19:41:11
【问题描述】:
我们有 100 个 proc 正在创建临时表并且不删除它们。许多构建都在生产中。我们希望 SQL 查询在 N (=2) 天后删除这些并安排它。有没有办法做到这一点?下面是从旧临时表中迭代的示例代码,但如果我运行它,它就无法删除这些表。
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;
【问题讨论】:
-
您的示例代码是否适用于固定日期?你可以添加类似
DATEADD(d,-2,GETADATE())这样的东西来让它动态 -
是的,兄弟!它的暗示。 :)
-
编码时不要假设或暗示任何事情。
-
#temp 和 ##temp 表在 tempdb 中结束,但它们由 SQL Server 管理和处理。在 tempdb 中创建自己的表与创建临时表不同。不要那样做。
-
@Nick.McDermaid 我已经编辑了问题的正确性。它不适用于较旧的临时表。甚至“SA”用户也拒绝访问 tempdb。
标签: sql sql-server optimization temp-tables