在ssis中执行sql任务映射变量

时间:2013-04-01 19:22:07

标签: sql-server ssis

INSERT INTO [DEV_BI].dbo.[DimAktivitet]([Beskrivning],[företag],[Projektnummer],[Aktivitet],
            loaddate)
SELECT NULL,
       a.DATAAREAID,
       a.PROJID,
       a.MID_ACTIVITYNUMBER,
       GETDATE()
FROM [?].dbo.[v_ProjCostTrans_ProjEmplTrans] a
LEFT OUTER JOIN [DEV_BI] .dbo.[DimAktivitet] b ON a.MID_ACTIVITYNUMBER = b.Aktivitet
AND a.DataAreaID = b.företag
AND a.ProjID = b.Projektnummer
WHERE b.Aktivitet_key IS NULL

我在执行sql任务中有上面的sql代码,在参数映射中我已经映射了一个名为user :: connectionstring的变量,数据类型为nvarchar,参数名称为0.我得到了以下错误。

  

[执行SQL任务]错误:执行查询“插入[DEV_BI] .dbo。[DimAktivitet]([Beskrivni ...”失败,出现以下错误:“无效的对象名称?.dbo.v_ProjCostTrans_ProjEmplTrans”。 “。可能的失败原因:查询问题,”ResultSet“属性设置不正确,参数设置不正确或连接未正确建立。

请某人帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

您似乎正在尝试根据变量更改数据库。执行SQL任务只能将参数用作WHERE子句中的过滤器。 this TechNet article中描述了此行为。例如,你可以这样做:

insert into [DEV_BI].dbo.[DimAktivitet]([Beskrivning],[företag],[Projektnummer],[Aktivitet],loaddate)  
select null,a.DATAAREAID,a.PROJID,a.MID_ACTIVITYNUMBER,GETDATE() from 
[DEV_BI].dbo.[v_ProjCostTrans_ProjEmplTrans] a 
left outer join 
[DEV_BI] .dbo.[DimAktivitet] b
on a.MID_ACTIVITYNUMBER = b.Aktivitet AND a.DataAreaID = b.företag AND a.ProjID = b.Projektnummer
where b.Aktivitet_key is null
AND b.SomeFilterCriteria = ?;

如果您真的想根据变量改变数据库,那么您有三个选择:

  1. 根据in a blog post所述的表达式,将Connection Manager连接字符串更改为数据库连接。如果您只是更改数据库,那么这是最佳解决方案。

  2. 将整个SQL代码生成为变量,并将变量作为SQL命令执行,而不是将变量传递给执行SQL命令。在“从变量传入SQL语句”一节中对此进行了描述{<3}}。

  3. 创建存储过程,将参数传递给存储过程,并让它生成动态所需的SQL。