找出SSIS中的项目名称

时间:2015-10-28 19:43:27

标签: sql-server ssis sql-server-2014

是否可以通过脚本任务或变量在SSIS中找出项目名称?

我知道如何获取PackageName和TaskName,但在这种情况下,我需要ProjectName。

2 个答案:

答案 0 :(得分:2)

不可否认,这是一套神奇的房子,但它在通过SSDT运行时起作用......你需要一些东西让这个脚本任务工作:
1.要访问的变量,以便您可以爬到其父级 2.对Microsoft.SqlServer.DTSRuntimeWrap的引用

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using RuntimeWrapper = Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{

    public void Main()
    {
        RuntimeWrapper.IDTSProject100 p = ((RuntimeWrapper.IDTSProject100)((Package)Dts.Variables["User::myVar"].Parent).Project);
        string projectName = GetProjectName(p);

        Dts.TaskResult = (int)ScriptResults.Success;
    }

    private string GetProjectName(RuntimeWrapper.IDTSProject100 proj) 
    {
        System.Reflection.PropertyInfo pInfo = proj.GetType().GetProperty("Project", 
        System.Reflection.BindingFlags.Public | 
        System.Reflection.BindingFlags.NonPublic | 
        System.Reflection.BindingFlags.Instance);
        Project p = (Project)pInfo.GetValue(proj, null);

        return p.Name;
    }


    enum ScriptResults
    {
        Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
        Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    };
}

答案 1 :(得分:1)

这是我之前尝试过的一种可能的解决方案。

只需将System::VersionGUID映射到@Version,将System::PackageID映射到@Package,如下面的查询。

DECLARE @Package uniqueidentifier = ?
DECLARE @Version uniqueidentifier = ?
DECLARE @ProjectName nvarchar(100) = (
SELECT proj.name 
FROM [catalog].[packages] pkg
INNER JOIN catalog.projects proj ON pkg.project_id = proj.project_id
WHERE package_guid= @Package
AND version_guid = @Version
)

SELECT ISNULL(@ProjectName, 'running from ssdt') as ProjectName;

如果项目部署在SSIS目录中并且从SSDT运行,您将获得项目名称,否则它将使用您可以放置​​任何内容的ISNULL函数返回null。我希望这可以帮到你。

编辑: version_guid澄清

如果项目已部署在多个文件夹中,version_guid将会有所不同。

查找文档msdn网站关于version_guid属性非常简短。

  

获取首次创建包时生成的版本GUID。   该字段是只读的。

在SSISDB中创建包的过程将是在部署时,每个项目部署的version_guid应该是不同的。

我没有深入测试,但我重新创建了这个场景:在两个不同的文件夹中部署相同的项目。

enter image description here

注意package_guid和version_guid列。