我意识到这在语法上很糟糕,但我认为它在某种程度上解释了我正在尝试做的事情。本质上,我有一个批处理作业,每天早上在一张小桌子上运行,作为规范的一部分,我需要在每次加载之前创建一个备份,以便报告可以访问。
到目前为止,我所拥有的是:
select *
into report_temp.MSK_Traffic_Backup_ + getdate()
from property.door_traffic
我怎样才能使这个功能或我应该考虑这样做更好的方式?
我意识到这在语法上很糟糕,但我认为它在某种程度上解释了我正在尝试做的事情。本质上,我有一个批处理作业,每天早上在一张小桌子上运行,作为规范的一部分,我需要在每次加载之前创建一个备份,以便报告可以访问。
到目前为止,我所拥有的是:
select *
into report_temp.MSK_Traffic_Backup_ + getdate()
from property.door_traffic
我怎样才能使这个功能或我应该考虑这样做更好的方式?
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
。
我不确定你是否正在寻找这个。
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;