我正在尝试创建一个自动化的SQL代理作业,它将每月运行一次,并将数据加载到一个新的表中,每次作业运行时都有一个月结束日期。如何替换yyyymmdd以选择最新的月底日期?
IF OBJECT_ID('DataMart.dbo.tablename_yyyymmdd') IS NOT NULL
DROP Table DataMart.dbo.tablename_yyyymmdd
BEGIN
PRINT 'Student Data load completed'
SELECT *
INTO DataMart.dbo.tablename_yyyymmdd
FROM
( SELECT * FROM [DataMart].[dbo].[stutable_yyyymmdd]
) T;END;发布于 2020-02-22 00:51:29
可采取以下步骤。
convert()函数能够实现输出多种日期格式。exec sp_executesql执行。还要注意的是,这肯定不是自动化使用的最安全的方法。还请考虑参考这个职位以防止任意字符串执行。
/* 1. get yyyymmdd */
declare @s char(8) = convert(varchar, getdate(), 112);
print @s;
/* 2. build query and run */
declare @sql nvarchar(max); -- sp_executesql expects nvarchar
set @sql = '
IF OBJECT_ID(''testdb.dbo.tablename_' + @s + ''') IS NOT NULL
DROP Table testdb.dbo.tablename_' + @s + ';
BEGIN
PRINT ''Student Data load completed''
SELECT *
INTO testdb.dbo.tablename_' + @s + '
FROM
( SELECT * FROM [testdb].[dbo].[stutable_' + @s + ']
) T;
END;
';
print @sql;
exec sp_executesql @sql;在Server 2017上进行测试(linux映像,最新版本)
https://stackoverflow.com/questions/60347758
复制相似问题