2015-05-29 45 views
0

我有一個執行sql任務,將數據插入到表中,但在此之前,我需要確保沒有數據可用於特定日期。我們有一個表定義我們想要數據的日期的日期,並且我們使用ssis變量'Date'獲取特定的日期。今天我試圖加載數據dor'2015-05-10'。但它給了我像「[執行SQL任務]錯誤:「值沒有在預期範圍內」的錯誤。下面是我執行SQL任務查詢:錯誤:值不在刪除查詢的預期範圍內?

delete from STG_Shipped_Invoiced 
where Transaction_Date=? 


INSERT INTO STG_Shipped_Invoiced (div_Code, inv_inv_id, tot_Net_Amt, 
trans_date, trans_type, Created_date, Transaction_Date) 
select inv.DIV_CODE as Div_Code, inv.INV_ID as inv_inv_id, inv.TOT_NET_AMT as Tot_Net_Amt, 
inv.TRANS_DATE as trans_date, inv.TRANS_TYPE as trans_type, Getdate() as Created_date, 
CONVERT(DATE,inv.TRANS_DATE) as Transaction_Date 
from inv inv 
where CONVERT(DATE,inv.TRANS_DATE)=? and inv.TRANS_TYPE<>'CM' 
And inv.INV_ID in (select distinct INV_ID from inv_shp inv_ship where WHSE_CODE='WPP') 
order by 1 asc, 2 asc 


SELECT @@ROWCOUNT as NoOfRecords 

在這裏,我定義的變量「日期',我們在哪裏通過日期我是否在做任何錯誤的刪除查詢?

回答

0

我以前見過這個錯誤,當無意中試圖將多個值填充到只有一個參數時。應用「?」兩次,但根據您的描述,您只傳遞給它一個參數,即變量「Date」。查看SQL Task Editor中的參數映射,預期的範圍錯誤可能是由於此不一致。

  1. 您可以將SQL更改爲存儲過程?作爲單個參數傳遞給它一次或

    EXEC dbo.mystoredprocedure?

  2. 修改當前的SQL,使?被設置爲等於一個新的變量@Date。然後在你當前的SQL替換?與@Date。這樣它只傳遞一次。

 
DECLARE @Date DateTime 
SET @DATE = ?

DELETE FROM STG_Shipped_Invoiced WHERE [email protected] INSERT INTO STG_Shipped_Invoiced ( div_Code, inv_inv_id, tot_Net_Amt, trans_date, trans_type, Created_date, Transaction_Date) SELECT inv.DIV_CODE as Div_Code, inv.INV_ID as inv_inv_id, inv.TOT_NET_AMT as Tot_Net_Amt, inv.TRANS_DATE as trans_date, inv.TRANS_TYPE as trans_type, Getdate() as Created_date, CONVERT(DATE,inv.TRANS_DATE) as Transaction_Date FROM inv inv WHERE CONVERT(DATE,inv.TRANS_DATE)[email protected] AND inv.TRANS_TYPE<>'CM' AND inv.INV_ID IN (SELECT DISTINCT INV_ID FROM inv_shp inv_ship WHERE WHSE_CODE='WPP') ORDER BY 1 asc, 2 asc SELECT @@ROWCOUNT as NoOfRecords

現在您的SQL腳本正在尋找兩個參數,只有一個被提供。第三種方法是在參數映射中爲兩個不同的參數定義Date變量兩次,這樣可以避免修改當前的SQL。

我個人的建議是將您的SQL轉換爲存儲過程並改爲使用存儲過程。這樣,稍後在部署SSIS包後,您可以更新存儲過程中的SQL,而不必更新包。

+0

感謝user3662215, 你的解釋真的對我有用。正如你所說的那樣,我嘗試了存儲過程(你的第一個建議)。感謝您寶貴的時間。 – ramu

相關問題