2015-05-29 66 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

相关问题