如何按日期时间生成表名?

时间:2012-06-19 23:12:33

标签: sql sql-server sql-server-2008 tsql

我意识到这在语法上是不好的,但我认为这有点解释了我正在尝试做什么。基本上,我有一个批处理作业,每天早上将在一个小桌子上运行,作为规范的一部分,我需要在每个负载之前创建一个备份,可以通过报告访问。

到目前为止我所拥有的是:

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

我该如何制作这个功能,还是应该考虑这样做?

2 个答案:

答案 0 :(得分:3)

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

如果您对逻辑感到满意并想执行命令,只需在PRINTEXEC之间交换评论。

答案 1 :(得分: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;