有什么方法可以创建 excel 文件并保存或通过电子邮件发送?
is there any way to create an excel file and save it or email it?
有什么方法可以使用 SSIS(或任何 MSSQL Server 功能)自动 运行 存储过程并将输出保存为 Excel 文件(甚至平面文件),然后新创建的文件通过电子邮件发送给人们?
抱歉,我是 SSIS 的新手。
概括地说,您将拥有一个包含 2 个任务和 3 个连接管理器的 SSIS 包。
第一个任务是数据流任务。顾名思义,数据将流向此处 - 在您的情况下,从 SQL 服务器到 Excel.
在数据流任务中,将 OLE DB 源添加到数据流中。它会询问使用什么连接管理器,您将创建一个指向您的源系统的新连接管理器。将来源从 Table 选择器更改为查询,然后引用您的存储过程 EXECUTE dbo.ExportDaily'
希望程序无非是 select col1, col2, colN from table where colDate = cast(getdate() as date)
否则,您可能 运行 进入挑战组件以确定源元数据。元数据是 SSIS 数据流中的游戏名称。如果遇到问题,解决方案取决于版本 - 2012 年之前,您将以空操作 select 作为起点。 2012+ 你使用 WITH RESULT_SETS 来描述输出形状。
我们的来源已经确定,我们需要将数据放到某个地方,您已经指出 Excel。将 Excel 目的地拖到 canvas 上,这将需要一个连接管理器,因此在定义数据应放置的位置后让它创建一个。 在哪里 获取数据很重要。在你的机器上,C:\user\pmaj\Documents 是一个有效路径,但是当这个 运行s 在服务器上作为 ServerUser1 时......不是那么多。我有一个 C:\ssisdata\SubjectArea\Input & Output & Archive 文件夹的模式。
单击“列”选项卡,此处无需执行任何操作,因为它auto-mapped 源列到目标。通过单击 header 对目标列名称进行排序。一个好的做法是滚动列表并查找任何未映射的内容。
运行 包并确认我们生成了一个新文件并且它有数据。再次关闭 Excel 和 运行。它应该破坏了我们制作的文件。如果它出错(并且您没有通过在 Excel 中打开文件来“触摸”文件,那么您需要在 Excel 目标中找到表示覆盖现有文件的设置)
您现在已经解决了将数据导出到 Excel 任务。现在您想与其他人分享您新发现的智慧,并且您想使用电子邮件来实现。
发送电子邮件有两种方式。最常见的是电子邮件任务。您需要与您的 SMTP 服务器建立连接,我发现这在基于云的世界中往往更加困难 - 特别是在身份验证和这个东西 运行ning 作为无人值守的工作时。
此时,我假设您已经建立了一个有效的 SMTP 连接管理器。发送电子邮件任务很简单。定义电子邮件的收件人、主题、body,然后添加您的附件。
发送邮件任务的替代方法是使用执行 SQL 任务。 DBA 可能已经在您的服务器上配置了 sp_send_dbmail,因为他们希望服务器在发生坏事时提醒他们。通过该过程发送文件更容易,因为其他人已经解决了 smtp 连接、权限等难题。
EXECUTE msdb.dbo.sp_send_dbmail
@profile_name = 'TheDbasToldMeWhatThisIs'
, @recipients ='pmaj@a.com;billinkc@b.com'
, @subject = 'Daily excel'
, @body = 'Read this and do something'
, @file_attachments = 'C:\ssisdata\daily\daily.xlsx';
除了使用现有和维护的机制来邮寄文件外,Execute SQL Task 可以很容易地使用 ?
占位符进行参数化,因此如果您需要在通过 [= 部署包时更改配置文件40=],您可以创建 SSIS 变量和参数并将值映射到过程的参数并配置这些值 post 部署。
有什么方法可以使用 SSIS(或任何 MSSQL Server 功能)自动 运行 存储过程并将输出保存为 Excel 文件(甚至平面文件),然后新创建的文件通过电子邮件发送给人们? 抱歉,我是 SSIS 的新手。
概括地说,您将拥有一个包含 2 个任务和 3 个连接管理器的 SSIS 包。
第一个任务是数据流任务。顾名思义,数据将流向此处 - 在您的情况下,从 SQL 服务器到 Excel.
在数据流任务中,将 OLE DB 源添加到数据流中。它会询问使用什么连接管理器,您将创建一个指向您的源系统的新连接管理器。将来源从 Table 选择器更改为查询,然后引用您的存储过程 EXECUTE dbo.ExportDaily'
希望程序无非是 select col1, col2, colN from table where colDate = cast(getdate() as date)
否则,您可能 运行 进入挑战组件以确定源元数据。元数据是 SSIS 数据流中的游戏名称。如果遇到问题,解决方案取决于版本 - 2012 年之前,您将以空操作 select 作为起点。 2012+ 你使用 WITH RESULT_SETS 来描述输出形状。
我们的来源已经确定,我们需要将数据放到某个地方,您已经指出 Excel。将 Excel 目的地拖到 canvas 上,这将需要一个连接管理器,因此在定义数据应放置的位置后让它创建一个。 在哪里 获取数据很重要。在你的机器上,C:\user\pmaj\Documents 是一个有效路径,但是当这个 运行s 在服务器上作为 ServerUser1 时......不是那么多。我有一个 C:\ssisdata\SubjectArea\Input & Output & Archive 文件夹的模式。
单击“列”选项卡,此处无需执行任何操作,因为它auto-mapped 源列到目标。通过单击 header 对目标列名称进行排序。一个好的做法是滚动列表并查找任何未映射的内容。
运行 包并确认我们生成了一个新文件并且它有数据。再次关闭 Excel 和 运行。它应该破坏了我们制作的文件。如果它出错(并且您没有通过在 Excel 中打开文件来“触摸”文件,那么您需要在 Excel 目标中找到表示覆盖现有文件的设置)
您现在已经解决了将数据导出到 Excel 任务。现在您想与其他人分享您新发现的智慧,并且您想使用电子邮件来实现。
发送电子邮件有两种方式。最常见的是电子邮件任务。您需要与您的 SMTP 服务器建立连接,我发现这在基于云的世界中往往更加困难 - 特别是在身份验证和这个东西 运行ning 作为无人值守的工作时。
此时,我假设您已经建立了一个有效的 SMTP 连接管理器。发送电子邮件任务很简单。定义电子邮件的收件人、主题、body,然后添加您的附件。
发送邮件任务的替代方法是使用执行 SQL 任务。 DBA 可能已经在您的服务器上配置了 sp_send_dbmail,因为他们希望服务器在发生坏事时提醒他们。通过该过程发送文件更容易,因为其他人已经解决了 smtp 连接、权限等难题。
EXECUTE msdb.dbo.sp_send_dbmail
@profile_name = 'TheDbasToldMeWhatThisIs'
, @recipients ='pmaj@a.com;billinkc@b.com'
, @subject = 'Daily excel'
, @body = 'Read this and do something'
, @file_attachments = 'C:\ssisdata\daily\daily.xlsx';
除了使用现有和维护的机制来邮寄文件外,Execute SQL Task 可以很容易地使用 ?
占位符进行参数化,因此如果您需要在通过 [= 部署包时更改配置文件40=],您可以创建 SSIS 变量和参数并将值映射到过程的参数并配置这些值 post 部署。