0

.dtsx SSISパッケージをデプロイした後、ドライブにバスを取得するために実行できるクエリまたはC#コードがありますか、またはデプロイされた.dtsxファイルを取得できます。

4

3 に答える 3

4

MSDBパッケージは SQL Server に配置された SSIS パッケージのように格納されているのでRight Click、[ ] をクリックしますRun Package。ダイアログボックスが表示されます

ここに画像の説明を入力

タブをクリックし、Connection Managers個々の接続の接続文字列を変更します。

そうしないと

SSISパッケージが次を使用して作成されている場合はxml config file、をクリックしてconfiguration tab構成ファイルを開き、パッケージの詳細を確認します

更新 1:-

  1. SSIS パッケージ変数への値の割り当て

この名前空間を追加 Microsoft.SqlServer.Dts.Runtime;

Application app = new Application();
Package package = null;
package = app.LoadPackage(deployed ssis package path,null) //Load DTSX path
//Access the SSIS variables
pkg.Connections["sConn"].ConnectionString = strSourceConn;
pkg.Connection["dConn"].ConnectionString = strDestConn;

2.XMLを読む

すべての dtsx パッケージの基礎となるコードは ですxml。したがって、C# を使用して XML をロードし、各ノードを反復処理して情報を見つけることができます。

3.dtsx.config ファイルから情報を取得します。

上で述べたように、ssis パッケージには、すべての情報を格納する xml 構成ファイルが含まれる場合があります。point 2

4.パッケージ構成がSQLサーバーに保存されている場合は、以下のコードを使用します。コードは、SSISパッケージの情報の収集から取得されます

    SELECT    Props.Prop.query('.') as PropXml,
    Props.Prop.value('declare namespace p1="www.microsoft.com/SqlServer/Dts";
    string(./@p1:Name)','nvarchar(max)')  as PropName,
    Props.Prop.value('.', 'nvarchar(max)') as PropValue
    FROM    (
    SELECT    CAST(pkgblob.BulkColumn AS XML) pkgXML
    FROM    OPENROWSET(bulk 'C:\tmp\MyPkg.dtsx',single_blob) AS pkgblob
    ) t
    CROSS    APPLY pkgXML.nodes('declare namespace DTS="www.microsoft.com/SqlServer/Dts";
                    /DTS:Executable/DTS:Property') Props(Prop)

結論 :-

config file を使用して SSIS パッケージが作成されている場合。保管場所を特定します。格納されている場合は、XML configuration typeその XML ファイルを C# にロードし、ノードを検索します。ssis データが格納されている場合はsql server、上記の sql を実行してすべての情報を取得します。SQLクエリは、パッケージの詳細をxmlタイプで返します。これをC#で読み取って、必要な情報を取得できます

更新 2:-

SSIS パッケージが SQL Server にデプロイされている場合、以下のコードは C# を使用してパッケージの詳細を取得するのに役立ちます

public class SSISDetails
{
    public string PackageData { get; set; }
    public string PackageName { get; set; }
}

  string storedProc = string.Empty;
        List<SSISDetails> _pkgcol = new List<SSISDetails>();
        string connectionString = "server=localhost;Integrated Security=SSPI";
        using (var conn = new SqlConnection(connectionString))
        using (var command = new SqlCommand("SSISDetails", conn)
        {
            CommandType = CommandType.StoredProcedure
        })
        {

            conn.Open();
            SqlDataReader reader = command.ExecuteReader();

                while (reader.Read ())
                {
                    _pkgcol.Add(new SSISDetails() 
                    {
                       //Please don't write the code like the one below accessing 
                       //columns  using index .
                        PackageName =reader[2].ToString (),
                        PackageData =reader[10].ToString ()
                    });

                }

            conn.Close();
        }

        foreach (var item in _pkgcol.Where (a=>a.PackageName =="YourPackageName") )
        {
            //read the item.PackageData and using Linq to xml retrieve the nodes which
            //you want
        }

情報を取得するストアド プロシージャは次package nameのとおりです。pathdescriptionpackage dataxml

 Create Procedure SSISDetails
 as 
 begin
 with ChildFolders
 as
 (
   select PARENT.parentfolderid, PARENT.folderid, PARENT.foldername,
    cast('' as sysname) as RootFolder,
    cast(PARENT.foldername as varchar(max)) as FullPath,
    0 as Lvl
   from msdb.dbo.sysssispackagefolders PARENT
   where PARENT.parentfolderid is null
   UNION ALL
   select CHILD.parentfolderid, CHILD.folderid, CHILD.foldername,
   case ChildFolders.Lvl
        when 0 then CHILD.foldername
        else ChildFolders.RootFolder
    end as RootFolder,
    cast(ChildFolders.FullPath + '/' + CHILD.foldername as varchar(max))
        as FullPath,
    ChildFolders.Lvl + 1 as Lvl
   from msdb.dbo.sysssispackagefolders CHILD
   inner join ChildFolders on ChildFolders.folderid = CHILD.parentfolderid
   )
   select F.RootFolder, F.FullPath, P.name as PackageName,
   P.description as PackageDescription, P.packageformat, P.packagetype,
   P.vermajor, P.verminor, P.verbuild, P.vercomments,
   cast(cast(P.packagedata as varbinary(max)) as xml) as PackageData
   from ChildFolders F
   inner join msdb.dbo.sysssispackages P on P.folderid = F.folderid
   order by F.FullPath asc, P.name asc;

end
于 2013-01-28T09:23:47.300 に答える
2

ファイル システムに配置する場合のデフォルトのパッケージの場所は、C:\Program Files\Microsoft SQL Server\100\DTS\Packages (SQL 2008) または C:\Program Files\Microsoft SQL Server\90\DTS\Packages (SQL 2005) です。 )。

SQL サーバーにデプロイすると、msdb データベースに格納されるため、SQL Server Management Studio からアクセスできます。

  1. 接続オプションで「データベース エンジン」ではなく「統合サービス」を選択します。
  2. 保存されたパッケージを展開する - MSDB を展開し、パッケージを検索します (パッケージの保存時に使用したのと同じ名前で)。
于 2013-01-28T08:32:14.220 に答える
1

Visual Studio (または Business Intelligence Development Studio) からインポートできます。新しい SSIS プロジェクトを作成し、パッケージを右クリックして [インポート] を選択し、パッケージが保存されている SQL Server に接続します。

于 2013-01-28T08:49:48.580 に答える