Копирование развернутых на SQL Server пакетов служб SSIS обратно в Visual Studio 2008 - PullRequest
0 голосов
/ 19 ноября 2011

Моя разработка SSIS box с моей установкой Visual studio 2008 больше не работает.Я пытаюсь выяснить, как я могу взять пакеты, работающие на моем производственном сервере SQL 2008 SP2, и вставить их в новую установку Visual Studio на новом сервере.

спасибо

Ответы [ 2 ]

4 голосов
/ 19 ноября 2011

Пакеты - это просто XML-файлы.Просто скопируйте файлы локально, создайте новый пустой проект и затем импортируйте файлы * .dtsx в проект с помощью диалогового окна «Добавить существующий» в обозревателе решений.

3 голосов
/ 20 ноября 2011

Я предполагаю, что OP знает об основной копии файла, но я считаю, что их проблема в том, что у них есть пакеты, развернутые в MSDB.

Чтобы извлечь пакеты из MSDB, вы должны сначала идентифицировать где в MSDB они существуют.Для этого вы можете запросить sysssispackagefolders и sysssispackages или вы можете просто использовать мой запрос Запрос пакета SSIS

Вооруженный этим запросом, интересующий столбец - это столбец PackagePath.Соедините это с dtutil и у вас есть extract-o-matic для восстановления пакета.

Базовая форма извлечения из MSDB на localhost в текущую папку в файловой системе будет выглядеть так:.

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

Extract-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'
...