2012-11-27 69 views
1

我有這樣的SQL Server代理,創建一個備份表,這樣做:選擇進入和覆蓋

DECLARE @date datetime, @insert_cmd varchar(1000) 
SET @date =GETDATE() 
set @insert_cmd = 'select * into [tablename_'+CONVERT(varchar(100), @date, 112)+'] from tableA' 
exec (@insert_cmd) 

麻煩的是,選擇*到如果表中不存在的表纔有效。有沒有辦法改變這個插入表名_....而不必關心,如果需要覆蓋?

我試圖尋找在使用SQL來檢查表是否存在,做這樣的事情:

IF OBJECT_ID ('tablename', 'U') IS NOT NULL DROP tablename; 

與麻煩的是怎麼做的我宅院這些報價,使他們努力建立日期/時間添加到表名稱?我已經嘗試了一些變化,但沒有搖出:

/* errors with quotations: */ 
set @del_cmd = 'IF OBJECT_ID ('[tablename_'+CONVERT(varchar(100), @date, 112)+']', 'U') IS NOT NULL DROP [tablename_'+CONVERT(varchar(100), @date, 112)+']'; 
+1

沒有這樣的語法。爲什麼不能說'DECLARE @sql NVARCHAR(MAX); IF OBJECT_ID('tablename_'+ CONVERT ...)不是NULL BEGIN SET @sql = N'DROP TABLE tablename_'+ CONVERT ...; EXEC sp_executesql @sql; END'? –

+0

@AaronBertrand,完美,我怎麼能把這個標記爲答案?謝謝! – russds

+0

您可以自行解決問題的代碼。我會爲它投票。 –

回答

1

充分肯定@aaronBertrand,這是我結束了與代碼:

DECLARE @insert_cmd varchar(MAX), @del_cmd NVARCHAR(MAX), @date datetime 
SET @date =GETDATE() 
    IF OBJECT_ID('tablename_' + CONVERT(varchar(100), @date, 112)) IS NOT NULL 
    BEGIN 
SET @del_cmd = N'DROP TABLE tablename_' + CONVERT(varchar(100), @date, 112); 
EXEC sp_executesql @del_cmd; 
    END 
SET @insert_cmd = 'select * into tablename_'+CONVERT(varchar(100), @date, 112)+'] from TableA' 
EXEC (@insert_cmd) 

非常感謝!