执行sql任务映射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。我得到以下错误:

[Execute SQL Task]错误:执行查询"insert into [DEV_BI].dbo.[DimAktivitet]([Beskrivni…]"失败,出现以下错误:"无效对象名称'?.dbo. v_projcosttrans_projempltrans '."。失败可能的原因:查询问题、ResultSet属性设置不正确、参数设置不正确、连接建立不正确。

请谁来帮我解决这个问题

似乎您正在尝试根据变量更改数据库。Execute SQL Task只能在WHERE子句中使用参数作为过滤器。这篇TechNet文章描述了这种行为。例如,您可以这样做:

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. 根据博客文章中描述的表达式将Connection Manager连接字符串更改为数据库连接。如果您只更改数据库,这是最好的解决方案。

  2. 将整个SQL代码作为变量生成,并将变量作为SQL命令执行,而不是将变量传递给execute SQL命令。

  3. 这篇博文在"从变量传入SQL语句"一节中进行了描述。
  4. 创建存储过程,将参数传递给存储过程,并让它动态生成所需的SQL。

最新更新