SSIS将值保存为参数

3

我正在使用SELECT UpdateDate FROM dbo.log命令执行SQL任务。作为一名新手,请耐心等待并指导。我想将该值存储为一个变量,然后将其传递到后续数据流的where子句中。我的问题是:

  1. 设置Execute SQL任务的正确方法是什么?通常我使用OLE DB连接和上面的查询直接输入。结果集设置为单行,然后将其存储到我创建的变量User::UpdateDate中。但由于某些原因,这没有起作用?
  2. 然后,我想在数据流中调用此日期。即:SELECT * FROM Users WHERE RecordDate > User::UpdateDate。我认为其语法不同。

我真的很感激您的帮助。非常感谢。


1
你在select语句中返回了多个值,这是无法正常工作的(你遇到了什么错误?)。在你的SQL任务中,你需要使用右侧的参数选项卡选择你的变量,并在查询中使用一个问号(?),该问号将与你在参数选项卡/列表中使用的变量相关联。 - Brad
这个表里只有一条记录。它返回一个日期时间,例如“2019年3月15日12:47”。我只想将其保存到第一步的变量中。 - skippy
只要结果集设置为1行,并且在结果选项卡中有要返回的变量。进入结果集,单击添加并将变量名放入其中。然后它就会自动填充。 - Brad
感谢Brad的帮助。不幸的是,那并没有起作用,确认一下:ResultSet:SingleRow SQLStatement:SELECT UpdateDate FROM dbo.log。ParameterMapping为空,ResultSet ResultName:UpdateDate,VariableName:User::Variable。它在执行SQL步骤时失败了。 - skippy
你遇到了什么错误?听起来可能会返回多个记录,因为你的选择中没有where条件。或者你的变量数据类型不正确。 - Brad
这里有详细的指令和图片。确保您按照所有步骤操作(您可以跳过中间的某些步骤)。https://www.red-gate.com/simple-talk/sql/ssis/ssis-basics-using-the-execute-sql-task-to-generate-result-sets/ - Brad
2个回答

2
在 Execute SQL Task 编辑器中,按照下面的配置参数映射,其中使用您自己的变量,例如我在这个示例中使用的是 PackageStartTime

enter image description here

然后,在您的 SQL 语句中,使用以下内容:
SELECT * FROM Users WHERE RecordDate > ?

为了从SQL语句中保存值,您需要将结果集设置为单行,并按照下面的示例配置结果集:
``` 将结果集设置为单行 ```
请参考下面的图片: enter image description here

谢谢,这正是我想讲的,但我没有截图。 - Brad
你可能需要在查询中添加“TOP 1”。这不会阻止返回多行数据。 - KeithL
为什么在数据流任务中要使用两个Execute SQL任务,而不是像OP所要求的那样使用参数化查询? - Hadi

1

使用ResultSet执行SQL任务

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

添加一个Execute SQL任务,选择OLEDB连接,并使用以下命令作为SQL语句:

SELECT TOP 1 UpdateDate FROM dbo.log

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

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

附加信息

带参数化SQL命令的OLEDB源

在数据流任务中,添加一个OLEDB源,选择访问模式SQL命令。并编写以下命令:

SELECT * FROM Users WHERE RecordDate > ?

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

额外信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接