2015-10-28 41 views
0

是否可以通過腳本任務或變量找出SSIS中項目的名稱?找出SSIS中的項目名稱

我知道如何獲取PackageName和TaskName,但在這種情況下,我需要ProjectName。

+1

參考你可以查詢'SSISDB'數據庫?如果你可以這樣做,我會發佈一個可能的解決方案。 –

+0

這需要在開發人員機器上使用的同時工作。 –

+0

是的,我可以查詢SSIS數據庫。 –

回答

1

這是我剛纔嘗試的一種可能的解決方案。

只要將地圖System::VersionGUID改爲@VersionSystem::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運行,你會得到的項目名稱,否則將返回null使用ISNULL功能,你可以把什麼。我希望這可以幫助你。

編輯:version_guid澄清

如果該項目已在多個文件夾已部署的version_guid會有所不同。

尋找文檔msdn網站是很短的約version_guid財產。

獲取第一次創建包時生成的版本GUID。 此字段是隻讀的。

在SSISDB中創建軟件包將在部署時對每個項目部署應該是不同的version_guid。

我沒有深入測試,但我重新創建了這種情況:在兩個不同的文件夾中部署相同的項目。

enter image description here

注package_guid和version_guid列。

+0

如果您將項目部署在多個文件夾下,您是否冒險獲得錯誤的值? – billinkc

+1

檢查我的更新。每個部署中的version_guid更改。 –

1

這是,雖然是神聖的設置在火災hacktastic,但它通過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 
    }; 
}