如何筛选ToolID非空且DateIN为空的数据并发送汇总邮件?
实现筛选空DateIN且非空ToolID并发送邮件的方案
1. 数据筛选与变量存储
先通过SQL语句精准过滤符合条件的记录:
SELECT ToolID FROM 你的表名 WHERE DateIN IS NULL AND ToolID IS NOT NULL;
场景1:SQL Server(T-SQL)
将结果存入字符串变量(逗号分隔):
DECLARE @ToolIDs NVARCHAR(MAX) = ''; SELECT @ToolIDs = CONCAT(@ToolIDs, ',', ToolID) FROM 你的表名 WHERE DateIN IS NULL AND ToolID IS NOT NULL; -- 移除开头多余的逗号 SET @ToolIDs = STUFF(@ToolIDs, 1, 1, '');
场景2:Python(结合数据库连接)
读取数据库并将ToolID存入列表:
import pyodbc # 建立数据库连接 conn = pyodbc.connect('你的数据库连接字符串') cursor = conn.cursor() # 执行查询 cursor.execute(""" SELECT ToolID FROM 你的表名 WHERE DateIN IS NULL AND ToolID IS NOT NULL """) # 将结果存入列表 tool_ids = [row[0] for row in cursor.fetchall()] conn.close()
2. 发送包含ToolID的邮件
场景1:SQL Server发送邮件
使用内置存储过程sp_send_dbmail:
EXEC msdb.dbo.sp_send_dbmail @profile_name = '你的邮件配置文件', @recipients = '收件人邮箱@xxx.com', @subject = '待处理ToolID列表', @body = CONCAT('以下ToolID对应的DateIN为空:', @ToolIDs);
场景2:Python发送邮件
用smtplib库实现:
import smtplib from email.mime.text import MIMEText # 构造邮件内容 body = f"以下ToolID对应的DateIN为空:{'、'.join(map(str, tool_ids))}" msg = MIMEText(body, 'plain', 'utf-8') msg['Subject'] = '待处理ToolID列表' msg['From'] = '发件人邮箱@xxx.com' msg['To'] = '收件人邮箱@xxx.com' # 发送邮件 with smtplib.SMTP_SSL('smtp.xxx.com', 465) as server: server.login('发件人邮箱@xxx.com', '邮箱密码/授权码') server.send_message(msg)
关于你之前的IF语句问题
IF语句更适合单条记录的逻辑判断,而这里需要批量筛选记录。直接用WHERE子句批量过滤,再将结果聚合到变量中,是更高效的实现方式,无需逐条判断记录。
内容的提问来源于stack exchange,提问作者Keanan Dunn
相关产品推荐
相关产品推荐

