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::MachineName
或SELECT @@[System::MachineName]
给出了错误'Error Incorrect systax near '::'
我不是一个参数传递给查询。 我已经寻找了一天了,不过怎么也找不到做这一件简单的事情!
这里是你可以做到这一点的方法之一。 下面的示例包使用创建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 Type
是VARCHAR
。 设置Parameter
名称0
,这表明该参数的指标值。 单击OK按钮。
- 执行包。
- 你会发现插入到表的新纪录。 我保留了包名包。 这就是为什么表
希望帮助。
我以前从来没有使用它,但也许你可以检查出在执行SQL任务,使用的表达。
或者干脆把整个查询到一个变量的表达evaluateAsExpression设置为true。 然后使用OLE DB做你插入
每对我@ ZERO的答案评论(这里重复一个答案,因此不会被SSIS新人忽略)。
该任择议定书的问题是相当多的使用情况SSIS属性表达式。
要通过SSIS变量进入查询字符串一会串连成的SqlStatementSource属性设置一个表达式:
"INSERT INTO MYLOG (COL1) SELECT " + @[System::MachineName]
这并不意味着接受的答案是不是一个很好的模式,因为在一般情况下,参数化的方法是安全的(针对SQL注入)和更快(在再利用),比直接查询字符串操作。 但是,对于一个系统变量(而不是用户输入的字符串),该解决方案应该是从SQL注入安全的,并且这将是大致一样快或比参数化查询速度更快,如果再使用(如机器名称没有改变)。
随着@ user756519的答案,取决于您的连接字符串,你的变量名和SQLStatementSource变化
文章来源: How do I pass system variable value to the SQL statement in Execute SQL task?