2012-10-31 24 views
0

我有一個執行使用這個表達式SQL任務:如何從使用表達式的執行SQL任務中捕獲單行值?

@[User::SQLExportError] + (DT_WSTR,30)@[User::Id] 

表達正確的計算結果爲:

select count(*) as ErrorTableCount from [myschema].Error 
    where SPName in ('export/INSERT','export/DELETE') and Id = 1000 

在這同一個SQL任務,我想捕捉的as ErrorTableCount成單行結果用ResultName調用:ErrorTableCount變量名稱爲:User::ErrorTableCount

我得到的紅圈/ x橫告訴我:

There were errors during task validation. 

似乎有要使用表達式的SQL光源和含有結果集下定義的冠以數名錶達式中之間的一些衝突。任何建議/想法?

+0

@Siva,它是一種所謂的可變SQLExportError與id變量串聯。 – plditallo

+0

您應該驗證連接測試是否可以將「結果集」配置爲「單行」,在「結果集」頁面中設置變量,將表達式放入SQLStatementSource中,如果該表達式仍不起作用,則需要更多信息來幫助你。 :) – Rednaxel

回答

6

我無法確定在您的方案中導致錯誤的原因。我試圖根據這個問題重新創建場景。這個例子可能會幫助你弄清楚你有什麼不同。

創建一個名爲dbo.Error

CREATE TABLE [dbo].[Error](
    [Id] [int] NOT NULL, 
    [SPName] [varchar](20) NOT NULL 
) ON [PRIMARY] 
GO 

一個簡單的表格填充表使用下面的腳本的一些樣本數據。

INSERT INTO dbo.Error (Id, SPName) VALUES 
    (1000, 'export/INSERT'), 
    (1000, 'export/DELETE'), 
    (1001, 'export/INSERT'); 
GO 

在SSIS包上,創建連接管理器或數據源以連接到託管上述表的數據庫。在這個例子中,我創建了一個OLE DB連接管理器,因爲這是推薦的SQL Server數據庫提供者,並將連接管理器命名爲Practice。

在包上創建以下變量。

Variables

設置變量Id爲值1000,這樣我們將在執行SQL任務執行查詢將獲取至少兩行。

設置變量SQLExportError以下查詢:

SELECT COUNT(號),從ErrorTableCount WHERE dbo.Error在SPName( '出口/ INSERT', '導出/刪除')和id =

選擇變量SQLFetch並按F4查看屬性。設置屬性EvaluateAsExpressionTrue。點擊省略號按鈕表達式屬性並設置下列表達式。

@[User::SQLExportError] + (DT_WSTR,30)@[User::Id] 

Expression

拖放一個執行SQL任務到控制流標籤。如下所示配置執行SQL任務的常規頁面,以執行存儲在表達式變量中的SQL查詢。

Execute SQL Task - General

配置結果集頁面,接受查詢返回的值,並將其存儲在變量。

Execute SQL Task - Result Set

添加腳本任務查看存儲在變量中的值。配置腳本任務來讀取可變ErrorTableCount

Script Task

下面的C#代碼添加到腳本任務。

public void Main() 
{ 
    MessageBox.Show(String.Format("Value in variable ErrorTableCount: {0}", 
     Dts.Variables["User::ErrorTableCount"].Value), 
     "Execute SQL Task - Single Row"); 
    Dts.TaskResult = (int)ScriptResults.Success; 
} = 

Script Task Code

關閉腳本任務編輯器。控制流程看起來像這樣。

Control flow

當執行包,消息框應該與計數出現,因爲這是在採樣數據行已的Id的值設置爲1000。

的數量

希望能幫助你找到你的配置有問題。

Package execution

+0

Siva,非常感謝你所有的時間。關鍵是SQLFetch並相應地設置Source變量。雖然我已經完成了@Rednaxel提到的所有步驟,但需要第二個變量來避免驗證衝突並允許此流程工作。再次感謝你。 – plditallo

相關問題