【发布时间】:2015-12-19 01:19:39
【问题描述】:
我想以编程方式删除一些可能存在或不存在的表。目标是预定的工作。我可以通过将其放入 SP 来使其成为手动过程,但我相信尽可能自动化。我找到了这个How to drop tables based on sys.objects?,但我不知道如何让它工作。它只删除了一张表。
我使用的是 SQL Server 2005。
这是我根据上述链接尝试的:
DECLARE @sql NVARCHAR(MAX);
SELECT @sql = N'DROP TABLE '
+ QUOTENAME(SCHEMA_NAME([schema_id]))
+ '.' + QUOTENAME(name) + ';'
FROM sys.tables
WHERE create_date < dateadd(d, -7, getdate()) and [name] like 'tmpTableDump%';
EXEC sp_executesql @sql;
我从来没有做过预定的工作,但我想一旦我得到正确的代码,我应该能够做到。我不是 DBA,而是应用程序程序员。
WBratz 提供了解决方案。这是完整的答案:
DECLARE @sql NVARCHAR(MAX)
DECLARE @count int
SELECT @count = COUNT(*) from sys.tables where create_date < dateadd(d, -7, getdate()) and [name] like 'tmpTableDump%'
WHILE @COUNT > 0
BEGIN
SELECT @sql = N'DROP TABLE '
+ QUOTENAME(SCHEMA_NAME([schema_id]))
+ '.' + QUOTENAME(name) + ';'
FROM sys.tables
WHERE create_date < dateadd(d, -7, getdate()) and [name] like 'tmpTableDump%'
EXEC sp_executesql @sql;
SET @count = (SELECT (@count - 1))
END
【问题讨论】:
-
那是我得到我发布的代码的地方。
标签: tsql