我如何通过系统变量值的SQL语句的执行SQL任务?(How do I pass system var

2019-07-29 01:53发布

SSIS 2008年非常简单的任务。 我想检索系统变量,并在SQL INSERT使用它。 我想找回价值System:MachineName ,并在INSERT语句中使用它。

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

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

我不是一个参数传递给查询。 我已经寻找了一天了,不过怎么也找不到做这一件简单的事情!

Answer 1:

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

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

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

  • 在参数映射选项卡,单击添加按钮,选择包变量,你想使用。 相应地更改数据类型。 这个例子是要在PACKAGENAME插入表,所以Data TypeVARCHAR 。 设置Parameter名称0 ,这表明该参数的指标值。 单击OK按钮。

  • 执行包。
  • 你会发现插入到表的新纪录。 我保留了包名包。 这就是为什么表

希望帮助。



Answer 2:

我以前从来没有使用它,但也许你可以检查出在执行SQL任务,使用的表达。

或者干脆把整个查询到一个变量的表达evaluateAsExpression设置为true。 然后使用OLE DB做你插入



Answer 3:

每对我@ ZERO的答案评论(这里重复一个答案,因此不会被SSIS新人忽略)。

该任择议定书的问题是相当多的使用情况SSIS属性表达式。

要通过SSIS变量进入查询字符串一会串连成的SqlStatementSource属性设置一个表达式:

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

这并不意味着接受的答案是不是一个很好的模式,因为在一般情况下,参数化的方法是安全的(针对SQL注入)和更快(在再利用),比直接查询字符串操作。 但是,对于一个系统变量(而不是用户输入的字符串),该解决方案应该是从SQL注入安全的,并且这将是大致一样快或比参数化查询速度更快,如果再使用(如机器名称没有改变)。



Answer 4:

随着@ user756519的答案,取决于您的连接字符串,你的变量名和SQLStatementSource变化



文章来源: How do I pass system variable value to the SQL statement in Execute SQL task?