我有一个文件名“Sales_20170331”。 现在我需要从这个文件中加载一个事实表。 该表包含Sales_quarter_date,SaleId列 sale_quarter_date列是从我在ssis中创建的@FileName变量加载的。 现在我需要在SSIS中创建执行sql任务,该任务将删除事实表中sales_quarter_date = @FileName的行。如果是quarter_date!= @FileName,则加载这些记录。 查询应该类似于
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Facttable]') AND type in (N'U')
AND (SELECT COUNT(*) FROM [dbo].[FactTable]) >0)
DELETE FROM [dbo].[FactTable]
WHERE sale_quarter_date = @FileName
但看起来查询中有一些错误。 你能帮我修一下查询并设计执行sql任务吗?
答案 0 :(得分:0)
您为执行而编写的当前查询无法满足'if quarter_date!= FileName'的需要。这是你可以做的 -
使用“执行SQL任务”并编写一个查询,使用该查询获取现有的销售季度日期,如下所示。将'ResultSet'设置为'Single Row',并在'ResultSet'中添加分配结果集 -
从dbo.Facttable中选择max(SaleQuarterDate)作为'SaleQuarterDate'
现在创建用于加载的“数据流任务”。将上述任务连接到此任务。双击连接并将评估表达式设置为 - 表达式和约束。在表达式中给出条件 - @ [User :: FileName]!= sSaleQuarterDate_Existing。
创建另一个“执行SQL任务”。这是在条件匹配时需要用于从表中删除现有记录的那个。将任务从“步骤2”连接到此任务。再次执行与“步骤3”相同的步骤,但这次将条件更改为 - @ [User :: FileName] == sSaleQuarterDate_Existing。在这个时候,你有同样的查询。
您可能面临的最大错误是,您自己提供参数名称。尝试按以下方式修改查询 -
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Facttable]') AND type in (N'U')
AND (SELECT COUNT(*) FROM [dbo].[FactTable]) >0)
DELETE FROM [dbo].[FactTable]
WHERE sale_quarter_date = ?
在“参数映射”窗口中,指定“FileName”用户变量。