sql-server - 如何替换 yyyymmdd 以选择表名称的最新月份结束日期
问题描述
我正在尝试创建一个自动 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;
解决方案
可以采取以下步骤。
- 该
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;
在 SQL Server 2017 上测试(linux docker 镜像,最新版本)
推荐阅读
- flutter - SliverPesistentHeader 和延迟加载
- variables - 如何在SPSS中创建配偶变量?
- python - 我无法使用 anaconda 安装 tensorflow 和 keras
- sql-server - OPENROWSET 到 TABLE,语法不正确
- amazon-s3 - 使用 aws-sdk-go 从 Fargate 容器到 S3 的 IAM 身份验证失败
- flutter - 为 x86 构建的 Android SDK 不支持配置文件模式?
- php - 如何通过访问 url 将数据写入 .csv 文件(可能使用 .php 在 url 末尾捕获数据)
- python - 如何从一个原始链接获取请求链接?(获取您在开发者控制台中看到的请求链接)
- ios - SwiftUI:打开带有动态内容的模式表仅在第一次尝试时失败
- c# - asp.net 页面中 Ajax 中的倒数计时器