SSIS新手如何将数据输出到文件

时间:2019-05-04 19:37:44

标签: ssis

好的,所以我是SSIS的一个完整的新手,但是我需要导出存储在数据库中的与特定销售订单有关的图像,我尝试以SQ中的SP的形式进行此操作,但这需要CURSORS,所以我发现这非常容易在SSIS中做同样的事情,但是我有一个奇怪的问题,DataFlow OLE DB到Data Flow的工作正常,但是我不得不声明SQL中的OUTPUT FILE LOCATION路径。我已经弄清楚了如何在控制流上创建动态文件,但是我无法解决的是如何删除声明的PATH并将其指向控制流文件系统任务。我真的希望这是有道理的,我会提供任何帮助

控制流

Control Flow

数据流任务

Data Flow

SQL-

DECLARE @Path nvarchar(1000);

SET @Path = N'C:\Users\X-JonC\Documents\';

SELECT
    Products_IMAGEDATA.ImageData
,   Products_IMAGEDATA.ImageTitle
,   @Path + Imagetitle AS path
FROM
    SalesOrders
    INNER JOIN
        SalesOrderItems
        ON SalesOrders.SalesOrder = SalesOrderItems.SalesOrder
    INNER JOIN
        Products
        ON SalesOrderItems.Product = Products.Product
           AND SalesOrderItems.Product = Products.Product
    INNER JOIN
        Products_IMAGEDATA
        ON Products.Product = Products_IMAGEDATA.Product
WHERE
    SalesOrders.SalesOrderId = ?

1 个答案:

答案 0 :(得分:3)

文件系统任务是用于在文件系统上执行操作(复制/重命名/删除文件/文件夹)的工具。您可能不需要文件系统任务,除非将文件导出到磁盘后需要对文件进行某些操作(例如复制到远程位置或其他内容)。

数据流任务是用于在多个位置之间移动数据的任务。就您而言,您想将数据从数据库移至文件系统。有趣的是,您需要导出二进制/图像数据。

创建一个数据流任务并将它的“导出列”任务连接起来是一个很好的开始。

您正在努力解决的挑战是如何将SSIS变量值添加到程序包中。当前,您已将其硬编码为TSQL变量@Path。 假设正在工作,那么您只需要使用SalesOrderId ?中已有的参数化方法,并以相同的方式填充@Path的值-因此,第三行变为{ {1}}

要注意的一件事是OLE和ODBC参数化基于顺序位置(分别基于0和1)。通过在第3行中添加此新参数占位符,它现在是WHERE子句使用之前的第一个元素,因此您将需要更新映射。或者,您可以偷懒地用DECLARE @SalesOrderId int =?替换空行2。 {这将使第一个元素保持原样,将新元素作为+1添加到用法中}。您需要将最终的问号替换为局部变量,例如

SET @Path = ?;

参考答案