如何使用 SSIS 将查询结果集作为电子邮件附件发送?

2024-02-16

我有一个结果集Execute SQL Task查询保存在 System.Object 变量上,我想使用Send Mail Task在 MessageSource 上使用以下表达式。

"请查找附加数据摘要\n\n" + SUBSTRING( @[User::myVariable] ,1,3990)
+“\n\n”


也许您现在已经找到了问题的答案。这个答案是为其他可能偶然发现这个问题的人提供的。我认为您不能在表达式中使用对象变量。您需要循环遍历查询结果对象并将其格式化为字符串,以便可以通过电子邮件发送查询输出。您还可以将数据导出到文件并将该文件作为附件发送。这是另一种可能的选择。此示例演示如何循环查询结果集以形成消息正文,然后使用“发送电子邮件”任务通过电子邮件发送该消息正文。

分步过程:

  1. 创建一个名为dbo.EmailData使用下面提供的脚本SQL脚本部分。

  2. 截屏 #1显示样本数据Execute SQL在此示例中,任务将查询并通过电子邮件发送它。

  3. 在 SSIS 包上,创建5变量如屏幕截图所示#2.

  4. 在 SSIS 包上,放置以下任务:Execute SQL task, Foreach loop container, Script taskForeach 循环容器 and Send Email task.

  5. 配置Execute SQL task如截图所示#3 and #4.

  6. 配置Foreach loop container如截图所示#5 and #6。变量映射部分显示查询结果列出现的顺序以及它们如何分配给 SSIS 变量。这些变量将用于形成内部的电子邮件消息Script task.

  7. In the Script task,将代码替换为下面显示的代码脚本任务代码部分。该脚本任务具有非常简单的纯文本电子邮件格式。

  8. 配置发送电子邮件任务,如屏幕截图所示#7。您需要使用有效的电子邮件地址进行配置From and To fields.

  9. 配置控制流任务后,您的包应如屏幕截图所示#8.

  10. 示例包执行情况如屏幕截图所示#9.

  11. 包裹发送的邮件如截图所示#10。屏幕截图中的一些信息已被删除。您可以比较屏幕截图中显示的表格数据#1通过此电子邮件输出,它们应该相同。

希望有帮助。

SQL 脚本: .

CREATE TABLE [dbo].[EmailData](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemId] [varchar](255) NOT NULL,
    [ItemName] [varchar](255) NOT NULL,
    [ItemType] [varchar](255) NOT NULL,
    [IsProcessed] [bit] NULL,
 CONSTRAINT [PK_EmailData] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

脚本任务代码:

C#代码只能在SSIS 2008 and above. .

/*Microsoft SQL Server Integration Services Script Task
   Write scripts using Microsoft Visual C# 2008.
   The ScriptMain is the entry point class of the script.
*/

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;

namespace ST_7f59d09774914001b60a99a90809d5c5.csproj
{
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {

        #region VSTA generated code
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion

        public void Main()
        {
            Variables varCollection = null;
            string header = string.Empty;
            string message = string.Empty;

            Dts.VariableDispenser.LockForWrite("User::EmailMessage");
            Dts.VariableDispenser.LockForWrite("User::ItemId");
            Dts.VariableDispenser.LockForWrite("User::ItemName");
            Dts.VariableDispenser.LockForWrite("User::ItemType");
            Dts.VariableDispenser.GetVariables(ref varCollection);

            //Set the header message for the query result
            if (varCollection["User::EmailMessage"].Value == string.Empty)
            {
                header = "Execute SQL task output sent using Send Email Task in SSIS:\n\n";
                header += string.Format("{0}\t{1}\t\t\t{2}\n", "Item number", "Item name", "Item type");
                varCollection["User::EmailMessage"].Value = header;
            }

            //Format the query result with tab delimiters
            message = string.Format("{0}\t{1}\t{2}",
                                        varCollection["User::ItemId"].Value,
                                        varCollection["User::ItemName"].Value,
                                        varCollection["User::ItemType"].Value);

            varCollection["User::EmailMessage"].Value = varCollection["User::EmailMessage"].Value + message;

            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }
}

屏幕截图#1:

屏幕截图#2:

屏幕截图#3:

屏幕截图#4:

屏幕截图#5:

屏幕截图#6:

屏幕截图#7:

屏幕截图#8:

屏幕截图#9:

屏幕截图#10:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SSIS 将查询结果集作为电子邮件附件发送? 的相关文章

随机推荐

  • 获取那些有子子 ul 的 li

    如何获得那些li有孩子的ul 我想将 CSS 设置为那些li 我无法设置班级 因为li是动态打印的 当我如下设置 CSS 时 它设置了所有父级li来加 ul width 200px position relative ul li posit
  • 贝塞尔曲线和画布

    如何在画布上绘制贝塞尔曲线 我只有起点和终点 我想从起点到终点画一条线 我怎样才能做到这一点 您可以使用Path quadTo or Path cubicTo 为了那个原因 示例可以在 SDK 示例 FingerPaint 中找到 在你的情
  • backbone.js 解析 1 个元素(Id)

    对于骨干模型上的 id 来说 它只是id并且全部小写 如果我在服务器上的Id被调用怎么办UserId 在主干的解析方法中 我该如何更改UserId to id并对所有其他属性使用相同的名称 For eg window User Backbo
  • JTable 的页脚

    JTable 不支持显示包含每列聚合数据的页脚 受到建议解决方案的启发Oracle Suns 错误数据库 https bugs java com bugdatabase view bug bug id 4242646看起来很有希望 我从用滚
  • Python + 正则表达式:如何在Python中提取两个下划线之间的值?

    我正在尝试提取两个下划线之间的值 为此我写了这段代码 patient ids for file in files print file patient id re findall file patient ids append patien
  • componentWillReceiveProps 与 getDerivedStateFromProps

    componentWillReceiveProps 和 getDerivedStateFromProps 到底是什么对我来说是个微妙的问题 因为 我在使用 getDerivedStateFromProps 时遇到了一个问题 Componen
  • python 请求和 cx_freeze

    我试图冻结一个依赖于请求的 python 应用程序 但出现以下错误 Traceback most recent call last File c Python33 lib site packages requests packages ur
  • 找不到 SPSite 名称空间

    我无法找到名称空间SPSite 到目前为止我已经导入了这些 using System using System Collections Generic using System Linq using System Text using Sy
  • Solr 创建核心时出错:在架构中找不到 fieldType [x]

    我正在尝试让 Solr 核心与我自己的一起运行schema xml 但是Solr 版本5 2 1 一直抱怨丢失fieldType甚至不在我的元素中fields定义 org apache solr common SolrException f
  • 我的股票市场计划可以使用什么数据源? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想为 Linux 和 Windows 制作一个免费的开源 C 应用程序 它将创建实时股票市场图表 即
  • 使用 Windbg 调试 .NET OutOfMemoryException

    我需要帮助调试 net dll 中的 OutOfMemoryException 该 dll 将 rtf 文本转换为原始文本或 html 这是转换代码 http matthewmanela com blog converting rtf to
  • 永久删除机器范围的包源

    我最近从我的计算机上卸载了 Service Fabric 及其 SDK 然而 它留下了一个机器范围的包源 微软 Azure Service Fabric SDKC Program Files Microsoft SDKs Service F
  • 递归地用innerHTML替换shadowRoot[重复]

    这个问题在这里已经有答案了 我想获得提取了shadowRoot 元素的纯HTML 网站上有很多 ShadowRoot 元素 并且嵌套很深 我用那段代码来实现它 但它只提取了部分元素 const getShadowDomHtml shadow
  • 如何在 AngularJS 中丢弃预检响应

    当向我的服务发送 http post 请求时 我首先发送一个 Option 请求 根据 Cors 的要求 然而我已经意识到我的OPTIONS 飞行前 请求返回否response data在其回应中 但我的POST请求是 这带来了一个问题 因
  • 如何更改 Chart.JS 中标签的字体(系列)?

    我想将 Chart JS 水平条形图中的字体更改为更时尚的字体 我尝试过以下方法 但都不起作用 var optionsBar fontFamily Candara Calibri Courier serif bodyFontFamily C
  • 如何在 C# 中为用户获取 AD LDS 条目的有效权限?

    我有第 3 方应用程序使用 AD LDS 来存储其分层数据 并且我需要在 ASP NET MVC 中为此系统提供 Web UI 它在目录条目上使用 DACL 来控制用户对各个条目的访问权限 我发现了一些解释如何阅读的好文章ActiveDir
  • Xcode 总是显示“FBSDKShareKit/FBSDKShareKit”.h 文件未找到

    无论我做什么 我可能做错了 当我尝试构建 Unity IOS 应用程序进行测试时 Xcode 总是显示 FBSDKShareKit FBSDKShareKit h 文件未找到 我已在 Xcode 项目中添加了 iOS 快速入门中指示的 Fa
  • 如何在没有登录按钮的情况下初始化 Google 登录?

    下面的代码作为一个简单的测试页面 使用谷歌登录 https developers google com identity sign in web
  • AVFoundation 导出方向错误

    我正在尝试将图像和视频结合起来 我将它们组合并导出 但它是横向旋转的 抱歉批量粘贴代码 我已经看到了有关应用转换的答案compositionVideoTrack preferredTransform但这没有任何作用 添加到AVMutable
  • 如何使用 SSIS 将查询结果集作为电子邮件附件发送?

    我有一个结果集Execute SQL Task查询保存在 System Object 变量上 我想使用Send Mail Task在 MessageSource 上使用以下表达式 请查找附加数据摘要 n n SUBSTRING User m