8

SSIS 2008。非常简单的任务。我想检索一个系统变量并在 SQL INSERT 中使用它。我想检索的值System:MachineName并在插入语句中使用它。

使用该语句INSERT INTO MYLOG (COL1) SELECT @[System::MachineName]给出错误Error: ..failed to parse. Must declare the scalar variable "@"

使用语句SELECT @System::MachineNameSELECT @@[System::MachineName] 给出错误'Error Incorrect systax near '::'

我不想将参数传递给查询。我已经搜索了一天,但找不到如何做这件简单的事情!

4

4 回答 4

16

这是您可以做到这一点的一种方法。以下示例包是SSIS 2008 R2使用 SQL Server 2008 R2 作为后端创建的。

  • 在您的 SQLServer 数据库中创建一个示例表,名为dbo.PackageData

表结构

  • 创建一个 SSIS 包。
  • 在 SSIS 上,添加一个名为SQLServer连接到您的数据库的 OLE DB 连接管理器,例如连接到 SQL Server 数据库。
  • 在控制流选项卡上,拖放一个Execute SQL Task
  • 双击执行 SQL 任务以显示执行 SQL 任务编辑器。
  • General编辑器的选项卡上,将Connection属性设置为名为 SQLServer 的连接管理器。
  • 在属性SQLStatement中,输入插入语句INSERT INTO dbo.PackageData (PackageName) VALUES (?)

常规选项卡

  • 在 Parameter Mapping 选项卡上,单击 Add 按钮,选择您要使用的 Package 变量。相应地更改数据类型。此示例将 PackageName 插入表中,因此Data Type将是VARCHAR. 将ParameterName 设置为0,表示参数的索引值。单击确定按钮。

参数映射选项卡

  • 执行包。
  • 您会注意到表中插入了一条新记录。我将包名称保留为 Package。这就是为什么桌子

包装数据

希望有帮助。

于 2012-04-18T21:56:37.060 回答
1

根据我对@ZERO 答案的评论(在此重复作为答案,因此 SSIS 新手不会忽视它)。

OP 的问题几乎是 SSIS 属性表达式的用例。

要将 SSIS 变量传递到查询字符串中,可以将其连接到为 SqlStatementSource 属性设置的表达式中:

"INSERT INTO MYLOG (COL1) SELECT " + @[System::MachineName]

这并不是说接受的答案不是一个好的模式,因为一般来说,参数化方法比直接查询字符串操作更安全(防止 SQL 注入)和更快(重用)。但是对于系统变量(而不是用户输入的字符串),这个解决方案应该不会受到 SQL 注入的影响,并且如果重新使用(因为机器名称没有改变),这将与参数化查询大致相同或更快)。

于 2015-07-27T00:49:26.183 回答
0

我以前从未使用过它,但也许您可以在执行 SQL 任务中查看表达式的使用。

或者只是将整个查询放入一个变量的表达式中,并将 evaluateAsExpression 设置为 true。然后使用 OLE DB 做你插入

于 2012-04-18T20:13:33.377 回答
0

连同@user756519 的回答,根据您的连接字符串、变量名和 SQLStatementSource 更改

https://docs.microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-task

于 2017-10-13T23:10:36.537 回答