我想以编程方式删除一些可能存在或可能不存在的表。目标是预定的工作。我可以通过将其放入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
答案 0 :(得分:2)
因为一次只能将一个值放入@sql中,所以你需要循环它,所以就像 选择COUNT(*) 来自sys.tables 其中create_date&lt; dateadd(d,-7,getdate())和[name]喜欢&#39;%无论%&#39;
然后循环,无论多少计数每次减去一次,所以像
files:
"/home/ec2-user/production.env":
mode: "000644"
owner: nodejs
group: nodejs
source: https://s3.amazonaws.com/bucket-name/file.env
container_commands:
01_mv_to_app_dir:
command: "mv /home/ec2-user/production.env ./production.env"
可能不完全正确,但这就是为什么它只删除一个,你看起来像一个聪明的家伙,看看我可能的语法错误,以正确