我正在尝试DROP表但我不想在存储过程中使用,我可以知道它可以在查询中工作吗?
declare @cmd varchar(4000)
declare cmds cursor for
select 'drop table [' + name + ']'
from sys.objects
where DATEDIFF(day,create_date,GETDATE()) = 26 AND schema_id = 1 AND type ='U'
open cmds
begin
fetch cmds into @cmd
if @@fetch_status != 0 break
exec(@cmd)
end
close cmds;
deallocate cmds
答案 0 :(得分:2)
您不必使用存储过程,甚至不能使用带有动态SQL的过程批处理。
只是一些手动步骤。运行此查询
select 'drop table [database].' + schema_name(schema_id) + '.' + quotename(name)
from [database].sys.objects
将结果复制到查询窗口并再次运行。例如,如果您使用的是.NET应用程序,则可以从此查询中获取结果,并将其作为下一个的CommandText发送。
如果没有CURSOR,您的动态SQL查询批处理写得更好,如下所示:
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')
只是不存在。 DROP TABLE语法:
DROP TABLE [database_name。 [schema_name]。 | schema_name。 ]
table_name [,... n] [; ]
没有任何动态能力的迹象。