【问题标题】:SSIS save value as a parameterSSIS 将值保存为参数
【发布时间】:2019-03-15 11:52:02
【问题描述】:

我在执行 sql 任务中使用SELECT UpdateDate FROM dbo.log 命令。我对此很陌生,所以请多多包涵。我想将该值存储为变量,然后将其传递到后续数据流的 where 子句中。我的问题是:

  1. 设置执行 SQL 任务的正确方法是什么。一般来说,我有 OLE DB 连接并直接输入上面的查询。结果集设置为单行,然后我将其存储到我创建的名为 User::UpdateDate 的变量中。由于某种原因,这不起作用?
  2. 然后我想在数据流中调用这个日期。 IE。 SELECT * FROM Users WHERE RecordDate > User::UpdateDate。我相信语法是不同的。

我非常感谢您对此的帮助。非常感谢提前

【问题讨论】:

  • 您是否在选择中返回了超过 1 个值,这不起作用(您因为它不起作用而得到什么错误)?在您的 SQL 任务中,您需要使用右侧的参数选项卡并在那里选择您的变量,然后使用 ?在您的查询中,以及?将关联到您在 SQL 任务的参数选项卡/列表中使用的变量
  • 不,该表中只有一条记录。它带回了日期时间。 IE。 '15/03/2019 12:47'。我只想将其保存到第 1 步的变量中。
  • 那么只要将结果集设置为 1 行,并且您有要返回的结果选项卡中的变量。转到结果集,然后单击添加,然后将您的变量名称放在那里。然后它将填充它。
  • 感谢布拉德的帮助。不幸的是,这不起作用,要确认:ResultSet:SingleRow SQLStatement:SELECT UpdateDate FROM dbo.log。 ParameterMapping 为空,ResultSet ResultName:UpdateDate,VariableName:User::Variable。执行 SQL 步骤失败
  • 您遇到什么错误?听起来可能会返回不止一条记录,因为您在选择中没有任何位置。或者你的变量数据类型不正确

标签: sql sql-server variables ssis etl


【解决方案1】:

在你的Execute SQL Task Editor中,如下图配置参数映射,显然使用你自己的变量,在这个例子中我使用PackageStartTime

然后在你的 SQL 语句中,使用下面:

SELECT * FROM Users WHERE RecordDate > ?

要保存 SQL 语句中的值,您需要将结果集设置为单行并配置结果集,如下例所示:

【讨论】:

  • 谢谢,这就是我想要查看的内容,但没有截图。
  • 您可能希望将前 1 个添加到您的查询中。没有什么可以阻止返回多行。
  • 为什么在 OP 要求数据流任务中的参数化查询时使用 2 Execute SQL Task??
【解决方案2】:

使用 ResultSet 执行 SQL 任务

首先,创建一个System.Date类型的变量,例如:@[User::UpdateDate]

添加执行 SQL 任务选择 OLEDB 连接并使用以下命令作为 SQL 语句:

SELECT TOP 1 UpdateDate FROM dbo.log

ResultSet 属性设置为 Single Row 并在 ResultSet 选项卡中添加具有以下值的 Row:

ResultName = 0   (which means the first column)
VariableName = @[User::UpdateDate]

其他信息

带有参数化 SQL 命令的 OLEDB 源

在数据流任务中,添加一个 OLEDB 源,选择 Access ModeSQL Command。并编写以下命令:

SELECT * FROM Users WHERE RecordDate > ?

单击Parameters 按钮并将变量@[User::UpdateDate] 映射为第一个参数。

其他信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2020-01-07
    • 2010-12-09
    相关资源
    最近更新 更多