您不必使用存储过程,甚至不必使用带有动态 SQL 的过程批处理。
只是一些手动步骤。运行此查询
select 'drop table [database].' + schema_name(schema_id) + '.' + quotename(name)
from [database].sys.objects
将结果复制到查询窗口并再次运行。例如,如果您使用的是 .NET 应用程序,则可以从该查询中获取结果,并将其作为下一个的 CommandText 发送。
您的动态 sql 查询批处理最好在没有 CURSOR 的情况下编写,如下所示:
declare @cmd nvarchar(max) = '';
select @cmd = @cmd + 'drop table [database].' + schema_name(schema_id) + '.' + quotename(name) + ';'
from [database].sys.objects
where DATEDIFF(day,create_date,GETDATE()) = 26 AND schema_id = 1 AND type ='U';
exec (@cmd);
我觉得我说得不够清楚
您正在寻找的语法,如果我要弥补的话:
DROP TABLES
WHERE object_id IN (
select object_id
from [database].sys.tables
where DATEDIFF(day,create_date,GETDATE()) = 26 AND schema_id = 1 AND type ='U')
只是不存在。删除表语法:
删除表[数据库名称。[模式名称]。| 模式名称。]
表名 [ ,...n ] [ ; ]
没有任何动态能力的迹象。