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

Mic*_*l A 1 sql t-sql sql-server sql-server-2008

我意识到这在语法上很糟糕,但我认为它在某种程度上解释了我正在尝试做的事情。本质上,我有一个批处理作业,它将每天早上在一个小表上运行,作为规范的一部分,我需要在每次加载之前创建一个备份,以便报告可以访问。

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

select  *
into    report_temp.MSK_Traffic_Backup_ + getdate()
from    property.door_traffic
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这个功能,或者我应该考虑用更好的方式来做这个吗?

Aar*_*and 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;
Run Code Online (Sandbox Code Playgroud)

现在,您可能还想添加一些逻辑,使脚本在一天内运行多次时不会出错,例如

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
Run Code Online (Sandbox Code Playgroud)

当您对逻辑感到满意并想要执行命令时,只需在PRINT和之间交换注释EXEC