2012-11-08 103 views
2

我已經在包級別compdate上聲明瞭一個變量,並且通過在包的控制流中刪除Execute SQL Task來測試數據流。SQL任務 - 設置包變量

在任務,

SQL語句:
select ? = (getdate() - 1) 
參數映射:
  • 變量名:User::compdate
  • 方向:Output
  • 數據類型:DATE
  • 參數名稱: 0
  • 參數尺寸:-1

爲什麼我收到錯誤:

[Execute SQL Task] Error: Executing the query "declare @compdate date 
set @compdate = (getdate() ..." failed with the following error: "Syntax error or access violation". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. 
+0

我很困惑,你的問題到底是什麼? –

+0

參考編輯....忘了發佈以下問題;) – GoldBishop

+0

您是否試圖在您的變量中存儲SQL查詢的結果? –

回答

2

我不明白爲什麼你需要執行SQL語句來獲取前一天,因爲這可以用各種其他的方式來完成。

要回答你的問題,因爲你試圖從你的執行SQL任務存儲SQL查詢的結果,你必須改變你提供的SQL語句。

新的查詢:

SELECT (GETDATE() - 1) AS DateVar

DateVar將是返回,你需要映射到您的變量參數。

您需要刪除您的參數映射,因爲它們不是必需的。打開結果集選項卡並添加一個新結果。設置結果名稱DateVar,並設置變量名是你的變量User::compdate

然後,您需要設置您的執行SQL任務返回一個單列導致一般選項卡中設置,映射到你的變量。選擇單行ResultSet選項。

使用結果集的詳細說明here。向下滾動到'使用單排結果集'部分,它有一個很好的示例,您可以按照其中。

+0

我可以在不使用ResultSet的情況下執行此操作嗎?嘗試使用輸出參數映射,但沒有得到任何地方 – GoldBishop

+0

是否有一個特別的原因,你不想使用ResultSet? –

+0

嘗試了這一點:http://www.julian-kuiters.id.au/article.php/ssis-execute-sql-task-output-parameters –

0

如果要使用而不使用result set。嘗試以下步驟。

  1. 在各自的數據庫中創建存儲過程。代碼如下 就是一個例子。

    CREATE proc GetYesterDay(@yesterday datetime output) 
    as 
    Select @yesterday=getdate()-1 
    
  2. 創建ADO.NET連接以運行存儲過程。其中,您可以提及參數的輸入和輸出的方向。

  3. 創建執行任務並將其配置爲以下屏幕截圖。 enter image description here
  4. 點擊參數映射和配置爲下面的截圖。 enter image description here

現在SSISCompletedDate變量將被填充相應的數據。

希望這會有所幫助!