【问题标题】:Execute sql task mapping variables in ssis在ssis中执行sql任务映射变量
【发布时间】:2013-04-01 19:22:06
【问题描述】:
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”属性设置不正确,参数设置不正确,或者连接没有正确建立。

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

【问题讨论】:

  • 当你在 Execute SQL Task 上映射变量时,这意味着你也想在 SQL 上使用真正的变量,你不能用它来从这样的变量中更改查询的数据库.您应该从“表达式”属性中更改连接字符串
  • 能否请您详细解释一下,以便我尝试实施。

标签: sql-server ssis


【解决方案1】:

您似乎正在尝试根据变量更改数据库。执行 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 所述的表达式,将连接管理器连接字符串更改为数据库连接。如果您只更改数据库而不更改其他内容,这是最好的解决方案。

  2. 将整个 SQL 代码生成为变量,并将变量作为 SQL 命令执行,而不是将变量传递给 Execute SQL Command。这在“从变量传递 SQL 语句”部分中描述了 in this blog post

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

【讨论】:

  • 我会阅读您的所有建议并尝试在我的解决方案中实施。感谢您的回复
猜你喜欢
  • 2020-01-05
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多