将部署在SQL Server上的SSIS包复制回Visual Studio 2008

时间:2011-11-19 03:01:48

标签: sql-server visual-studio ssis bids

我的Visual Studio 2008安装的我的开发SSIS框不再有效。我试图找出如何在生产的SQL 2008 SP2服务器上运行包并将它们插入到新服务器上的Visual Studio的新安装中。

感谢

2 个答案:

答案 0 :(得分:4)

包只是xml文件。只需复制本地文件,创建一个新的空项目,然后使用Solution explorer中的Add Existing对话框选项将* .dtsx文件导入到项目中。

答案 1 :(得分:3)

我假设OP知道基本文件副本,但我相信他们的问题是他们将软件包部署到MSDB中。

要从MSDB中提取包,您必须首先在它们存在的msdb中标识 where 。为此,您可以查询sysssispackage文件夹和sysssispackages,或者只使用我的查询SSIS Package Query

使用该查询,感兴趣的列是PackagePath列。与dtutil结合使用,您可以使用提取物进行包装恢复。

从localhost上的MSDB到文件系统中当前文件夹的提取的基本形式如下所示。

dtutil /sourceserver localhost /SQL "Package" /copy file;.\Package.dtsx

提取-O-MATIC

在文本模式下运行此查询(ctr-T)此查询生成一系列dtutil调用,这些调用又从服务器中提取SSIS包。

;
WITH FOLDERS AS
(
    -- Capture root node
    SELECT
        cast(PF.foldername AS varchar(max)) AS FolderPath
    ,   PF.folderid
    ,   PF.parentfolderid
    ,   PF.foldername
    FROM
        msdb.dbo.sysssispackagefolders PF
    WHERE
        PF.parentfolderid IS NULL

    -- build recursive hierarchy
    UNION ALL
    SELECT
        cast(F.FolderPath + '\' + PF.foldername AS varchar(max)) AS FolderPath
    ,   PF.folderid
    ,   PF.parentfolderid
    ,   PF.foldername
    FROM
        msdb.dbo.sysssispackagefolders PF
        INNER JOIN
            FOLDERS F
            ON F.folderid = PF.parentfolderid
)
,   PACKAGES AS
(
    -- pull information about stored SSIS packages
    SELECT
        P.name AS PackageName
    ,   P.id AS PackageId
    ,   P.description as PackageDescription
    ,   P.folderid
    ,   P.packageFormat
    ,   P.packageType
    ,   P.vermajor
    ,   P.verminor
    ,   P.verbuild
    ,   suser_sname(P.ownersid) AS ownername
    FROM
        msdb.dbo.sysssispackages P
)
SELECT 
    -- assumes default instance and localhost
    -- use serverproperty('servername') and serverproperty('instancename') 
    -- if you need to really make this generic
    'dtutil /sourceserver localhost /SQL "'+ F.FolderPath + '\' + P.PackageName + '" /copy file;.\' + P.PackageName +'.dtsx'
FROM 
    FOLDERS F
    INNER JOIN
        PACKAGES P
        ON P.folderid = F.folderid
-- uncomment this if you want to filter out the 
-- native Data Collector packages
-- WHERE
--     F.FolderPath <> '\Data Collector'