【问题标题】:How to use parameters in a SQL Task in SSIS?如何在 SSIS 的 SQL 任务中使用参数?
【发布时间】:2015-01-10 10:09:24
【问题描述】:

我正在开发一个数据仓库。

我编写了一个脚本来通过创建日期条目来加载维度表(例如 SSAS 向导,但直接在我的 SSIS ETL 过程中)。它在 SSMS 和直接在 SSIS 中的 T-SQL 任务中运行良好,无需使用参数)。 此脚本不提供任何 ResultSet,这只是一个在表中插入数据的循环。

这里是我的查询的快速浏览。

USE [MySQLServerDatabase]
GO

-- Some parameters used by the script.
DECLARE @PREFIX_YEAR_NAME       [nvarchar](50) = 'Year ';
DECLARE @PREFIX_QUARTER_NAME    [nvarchar](50) = 'Q';
DECLARE @PREFIX_WEEK_NAME       [nvarchar](50) = 'W';
DECLARE @PREFIX_MONTH_NAME      [nvarchar](50) = 'M';
DECLARE @DefaultBeginDate       [datetime]  = '01/01/2000';
DECLARE @Date                   [datetime];

SET @Date = @BeginDate

WHILE @Date <= @EndDate
    BEGIN
        -- ...
        -- INSERT INTO ...
    END

-- ...

但是,为了获得更易于使用和维护的东西,我想直接在脚本中使用 SSIS 变量。

这是我的参数(Project.params 文件)。 我的脚本需要它们全部工作:

然后,我添加了一个“执行 SQL 任务组件”,其中包含我的 SQL 查询(OLEDB 连接,直接输入法)。我创建了 5 个参数:

如何在 SQL 查询中使用参数? 我试图在脚本中使用与变量相同的名称,它不起作用。 我尝试使用索引(0、1、2 等)名称并使用“?”在脚本中,我不工作。

这是使用 '?' 时的错误作为参数:

错误:执行 SQL 任务时出现 0xC002F210,执行 SQL 任务:正在执行 查询“DECLARE @PREFIX_YEAR_NAME nvarchar = ?; D...”失败 出现以下错误:“生成了多步 OLE DB 操作 错误。检查每个 OLE DB 状态值(如果可用)。没有工作 完成。”。可能的失败原因:查询有问题,“ResultSet” 属性设置不正确,参数设置不正确,或 未正确建立连接。任务失败:执行 SQL 任务

有什么办法解决这个问题吗?

谢谢。

【问题讨论】:

  • 你能发布你使用的 sql 脚本吗?作为参数?

标签: sql-server sql-server-2008 tsql ssis sql-server-2012


【解决方案1】:

您可以将此查询放入存储过程中。在 SQLStatement 的 SQL 任务编辑器中,您可以通过 exec [sch].[sp_name] ?,?,?...,? 执行它(每个 ? 是一个参数)。 在“参数名称”列的“参数映射”选项卡中,您可以使用数字 0、1、2... n(它是存储过程中参数的顺序)。

【讨论】:

  • 创建存储过程是使用它的唯一方法吗?因为我在没有使用存储过程的情况下做了同样的事情,但它失败了。
  • @K4timini 不,这不仅限于 procs。它也适用于即席 sql 语句。错误是什么?
  • 在您的 SQL 任务编辑器中,您有一个选项“结果集”。是否设置为“无”?
  • 问题是错误消息没有帮助,因为您使用的是多步 sql。如果你把它放在一个存储过程中,你可能会得到一个更有用的错误信息。 @MarkWojciechowicz,请参阅 OP 中的错误消息。
  • @TabAlleman 抱歉 - 我希望 K4timini 在发布答案后再次尝试,但出现了新问题。我刚刚注意到原始图像使用 [at sign]parmName 作为参数名称。 K4timini 您是否确实将这些转换为 0,1,2...这是 OLEDB 连接的正确约定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
相关资源
最近更新 更多