首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换yyyymmdd以选择表名的最新月份结束日期

如何替换yyyymmdd以选择表名的最新月份结束日期
EN

Stack Overflow用户
提问于 2020-02-22 00:07:00
回答 1查看 59关注 0票数 0

我正在尝试创建一个自动化的SQL代理作业,它将每月运行一次,并将数据加载到一个新的表中,每次作业运行时都有一个月结束日期。如何替换yyyymmdd以选择最新的月底日期?

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-22 00:51:29

可采取以下步骤。

  1. convert()函数能够实现输出多种日期格式
  2. 随后,您的查询字符串可以通过连接构造并使用exec sp_executesql执行。

还要注意的是,这肯定不是自动化使用的最安全的方法。还请考虑参考这个职位以防止任意字符串执行。

代码语言:javascript
复制
/* 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映像,最新版本)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60347758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档