2010-01-21 54 views
5

我有許多SSIS包都連接到同一個數據庫。我不想在每個數據庫中將服務器名稱硬編碼到數據庫連接中,因爲它與活動服務器的開發者不同。這些服務器名稱可能會隨着時間而改變。如何在SSIS包中使服務器名稱動態化

我知道你可以把它放在一個配置文件中,但所有這些SSIS包存儲在SQL Server 2008中,我想保留SQL Server中的所有細節。

有沒有人有任何建議或意見?

我在考慮創建一個名爲GetServerName的包,它返回服務器名稱,我可以使用它來更改每個包中的連接。但是可能有更好的方法。

回答

0

我發現配置文件是一個非常方便的方法來解決這個問題。

如果您安排要從SQL Server代理程序執行的程序包,則可以指定要從文件路徑使用的配置文件,並且通常會處理所有參數要求。

如果你想保留SQL Server中的結果,你可以將它們存儲在一個表中,並檢索它們。但是現在你必須知道Dev/Test/Prod需要哪個服務器/表,並且你已經回到了原來的問題。

我的建議是:在所有服務器(Dev/Test/Prod)的相同物理位置有一個配置文件,並將作業指向相應的參數配置文件。

2

我使用具有活動服務器名稱的查詢中的servername填充變量。然後在腳本任務,我只是改變了連接字符串

這個例子是一個Excelfile,但是這將是一個SQL連接

Dts.Connections("ExcelConnection").ConnectionString = 
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\" + 

Dts.Variables("ActiveServerName").Value.ToString + "\Summary_" + 

Dts.Variables("FileDate").Value.ToString + 
".xls;Extended Properties=Excel 8.0;HDR=YES;" 
+0

這種運作良好,我們使用SSIS專門的數據加載和傳入db連接信息,因爲這對每個客戶安裝都是唯一的。 – DaveE 2010-01-21 18:23:48

7

一個非常好的特性在SSIS解決只是你的排序非常相似問題被稱爲包配置。許多人對如何存儲動態服務器/包屬性/變量值 - 配置文件,環境變量,sql服務器或註冊表項有不同的意見和/或想法。我個人喜歡將所有信息存儲在SQL Server中,這正是您想要做的。爲了實現這一目標,按照本文中步驟:Package Configuration Steps

1

除了配置文件...

您可以定義可以通過命令行或批處理作業或SQL Server中設置一個變量代理工作。該變量可以被替換爲服務器名稱(通過表達式IIRC)。

這對於您是否需要單個文件部署很有用。

編輯:

Example(對不起,SQL Server管理中心需要註冊)

2

我們使用的配置表,而不是一個文件。你從一個環境變量開始,用config表指向數據庫,然後從那裏取出所有其他配置。

這裏有一個腳本來填充配置表的樣本(你會給開發服務器,QA服務器,PROD服務器單獨的腳本:

--connections 
--for MyDatabaseName 
INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
'MyConfigurationName', 'Data Source=MYSQLSERVER;Initial Catalog=MyDatabaseName;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;', 'Package.Connections[MyDatabaseName].Properties[ConnectionString]' , 'String') 

--variables 
--FilePathImportServer 
INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
'MyConfigurationName', '\\MYSERVER\SOMECLIENT\Import\', '\Package.Variables[User::FilePathImportServer].Properties[Value]' , 'String') 

--select * from SSISConfig where configurationFilter = MyConfigurationName 
相關問題