2

これを行うバックアップテーブルを作成するこの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)

問題は、select * into table が機能するのは、テーブルがまだ存在しない場合のみです。これを変更して tablename_.... 気にせずに挿入し、必要に応じて上書きする方法はありますか?

次のようなことをして、テーブルが存在するかどうかを確認するために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 )+']'; 
4

1 に答える 1

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)

ありがとうございます!

于 2012-11-27T21:56:32.130 に答える