2013-04-23 34 views
1

我正在嘗試刪除表但我不想在存儲過程中使用,我可以知道它可以在查詢中工作嗎?刪除表語句但沒有使用存儲過程

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 
+1

你究竟在努力實現什麼。你的問題缺乏清晰度。 – 2013-04-23 04:01:45

+0

抱歉沒有這麼清楚,我只是想在SQL查詢和我嘗試很多方法,但仍然失敗 – askingPPl 2013-04-23 04:15:10

回答

2

您不必使用存儲過程,甚至不必使用具有動態SQL的過程批處理。

只需一些手動步驟。運行此查詢

select 'drop table [database].' + schema_name(schema_id) + '.' + quotename(name) 
from [database].sys.objects 

將結果複製到查詢窗口並再次運行。例如,如果您使用.NET應用程序,則可以從該查詢中獲取結果,並將其作爲下一個的CommandText發送。


您的動態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] [; ]

沒有任何動態能力的跡象。

+0

這種方法我嘗試之前,可以工作已經,但沒有我想要 – askingPPl 2013-04-23 04:17:47

+1

@askingPPl:請你解釋爲什麼? – 2013-04-23 04:29:04

+0

,因爲我的用戶界面允許用戶執行查詢,所以我需要在DROP表中聲明 – askingPPl 2013-04-23 04:54:48