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

SSIS新手如何将数据输出到文件,ssis,Ssis,好的,我是SSIS的新手,但我需要导出存储在数据库中的与特定销售订单相关的图像,我尝试在SQ中作为SP进行此操作,但这需要游标,我发现在SSIS中执行相同的操作非常容易,但我有一个奇怪的问题,DataFlow OLE DB to Data Flow工作正常,但我必须在SQL中声明路径输出文件位置。我已经解决了如何在控制流上创建动态文件创建,但我无法解决的是如何删除声明的路径并将其指向控制流文件系统任务。我真的希望这是有意义的,我感谢任何帮助 控制流 数据流任务 SQL- DECLARE @P

好的,我是SSIS的新手,但我需要导出存储在数据库中的与特定销售订单相关的图像,我尝试在SQ中作为SP进行此操作,但这需要游标,我发现在SSIS中执行相同的操作非常容易,但我有一个奇怪的问题,DataFlow OLE DB to Data Flow工作正常,但我必须在SQL中声明路径输出文件位置。我已经解决了如何在控制流上创建动态文件创建,但我无法解决的是如何删除声明的路径并将其指向控制流文件系统任务。我真的希望这是有意义的,我感谢任何帮助

控制流

数据流任务

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 = ?

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

数据流任务是用于在多个位置之间移动数据的任务。在本例中,您希望将数据从数据库移动到文件系统。有趣的是,您需要导出二进制/图像数据

通过创建数据流任务并将导出列任务连接到该任务,您有了一个良好的开端

您面临的挑战是如何将SSIS变量值放入包中。目前,您已将其硬编码为TSQL变量@Path。假设您所拥有的一切正常工作,那么您只需要使用SalesOrderId
中已有的参数化方法,并以相同的方式填充@Path的值-因此第三行变成
SET@Path=

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

DECLARE @Path nvarchar(1000);
DECLARE @SalesOrderId = ?
SET @Path = ?;

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 = @SalesOrderId;
参考答案