1

これは構文的に悪いことだと思いますが、私がやろうとしていることをある程度説明していると思います。基本的に、小さなテーブルで毎朝実行されるバッチ ジョブがあり、仕様の一部として、レポートからアクセスできる各読み込みの前にバックアップを作成する必要があります。

私がこれまでに持っているものは次のとおりです。

select  *
into    report_temp.MSK_Traffic_Backup_ + getdate()
from    property.door_traffic

この関数をどのように作成できますか、またはこれをより良い方法で行うことを検討する必要がありますか?

4

2 に答える 2

5
DECLARE @d CHAR(10) = CONVERT(CHAR(8), GETDATE(), 112);

DECLARE @sql NVARCHAR(MAX) = N'select  *
into    report_temp.MSK_Traffic_Backup_' + @d + '
from    property.door_traffic;';

PRINT @sql;
--EXEC sys.sp_executesql @sql;

ここで、特定の日に複数回実行された場合にスクリプトがエラーにならないようにするためのロジックを追加することもできます。

DECLARE @d CHAR(10) = CONVERT(CHAR(8), GETDATE(), 112);

IF OBJECT_ID('report_temp.MSK_Traffic_Backup_' + @d) IS NULL
BEGIN
  DECLARE @sql NVARCHAR(MAX) = N'select  *
  into    report_temp.MSK_Traffic_Backup_' + @d + '
  from    property.door_traffic;';

  PRINT @sql;
  --EXEC sys.sp_executesql @sql;
END

ロジックに満足してコマンドを実行したい場合は、コメントを と の間で入れ替えるだけPRINTですEXEC

于 2012-06-20T00:27:12.877 に答える
0

あなたがこれを探しているかどうかはわかりません。

DECLARE @date datetime, @CMD varchar(1000);
SET @date = CONVERT(VARCHAR(10), GETDATE(), 105)
SET @cmd = 'SELECT * INTO [dbo.T_TABLE_Backup_' + replace(cast(@date as varchar(11)),' ','_')+'] FROM dbo.T_TABLE'
print @cmd;
于 2012-11-06T15:50:02.260 に答える