2012-04-13 95 views
2

我正在運行一個SSIS包,我想在運行期間設置所需變量的值。下面的例子如何在運行時更改程序包變量值?

variable1= 1145554478 nvarchar(30)

我使用nvarchar的,因爲我添加更多的字符的字符串。

variable2= [ + variable1 + _S] 

variable1variable2是包變量。

我已經搜索了在運行時爲變量設置一個值的方法。正如我的想法,它似乎可以用SQL任務編輯器來完成。所以,我創建了一個。將variable1設置爲輸入值,將ResultSet設置爲單行,並將其設置爲variable2。

然後在代碼我寫

set Variable2 = '[' + ? + '_S]' 

它不工作,這裏的錯誤

Error: 0xC002F210 at Execute SQL Task, Execute SQL Task: Executing the query "set Variable2 = '[' + ? + '_S]'" failed with the following error: "Line 1: Incorrect syntax near '='.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. Task failed: Execute SQL Task.

是一個SQL任務編輯器運行時設置變量的最佳方式?

我認爲我在任務編輯器中編寫的代碼是錯誤的,因爲那裏的代碼並不總是與定期使用的相同的普通SQL。

+0

是的Siva,你不會錯過任何東西。我從任務編輯器解決了這個問題,但我也很想知道你的意見。謝謝 – 2012-04-13 15:09:17

回答

3

您不能在SQL語句中設置SSIS變量的值,而是返回值並將其分配給您的變量。

更改您的語句來

SELECT '[' + ? + '_S]' 

改變你的結果集爲「單行」,然後在「結果集」左邊用0

+0

不錯的一個msmucker,非常感謝,它的工作。不知道ResultSet中的'0' – 2012-04-13 14:40:14

+1

它是單行結果集列的索引,所以如果你要選擇其他的東西(SELECT'['+?+'_S]','SomethingElse' )你可以使用結果名稱1 – msmucker0527 2012-04-13 14:44:33

+0

等等,我現在明白了。非常感謝!這將在未來的流程中有用。 – 2012-04-13 14:46:38

2

最簡單的方法是(通常)創建一個腳本任務,並用C#或VB編寫代碼。

+0

在C#中我還不夠精通,甚至沒有像這樣簡單的代碼。這就是爲什麼即時通訊試圖從SQL做到這一點。將谷歌一些C#雖然 – 2012-04-13 14:32:40

+0

@丹尼爾 - 谷歌應該幫助你在這裏。您需要編寫的代碼應該只有一行左右。 – 2012-04-13 14:36:48

3

這裏的結果名稱添加變量是基於另一個變量的值在運行期間操作變量值的方法。該示例使用SSIS 2008 R2,但功能在所有SSIS版本上都一樣。

  • 創建一個新的SSIS包。
  • 右鍵單擊程序包上的任意位置,然後從上下文菜單中選擇Variables變量將顯示窗格。
  • 變量窗格中,創建兩個新變量命名爲Variable1和數據類型StringVariable2
  • 我們將Variable1設置爲值Test_Value

    Variables

  • 選擇第二個變量變量2,按F4帶來的屬性窗格。

  • 在屬性窗格上,將屬性EvaluateAsExpression更改爲True
  • 然後點擊Expression屬性上的省略號按鈕。

    Properties of Variable2

  • 在表達式生成器對話框,粘貼在Expression文本區域表達"[" + @[User::Variable1] + "_S]"

  • 如果您單擊評估表達式按鈕,您將看到Variable2將評估的值。在運行期間,變量Variable2將使用該表達式自動評估出現在Variable1中的值。

  • 表達式生成器也可以允許制定更復雜的表達式。請參閱Click this link以查看另一個表達式示例。

希望有所幫助。

Expression Builder

+0

非常感謝Siva。你的解釋不完全正確,但很好解釋。再次感謝,很多。 – 2012-04-13 15:40:32

相關問題