SSIS 2008.非常简单的任务。我想检索一个系统变量并在SQL INSERT中使用它。我想检索System:MachineName
的值并在insert语句中使用它。
使用语句INSERT INTO MYLOG (COL1) SELECT @[System::MachineName]
会出现错误 Error: ..failed to parse. Must declare the scalar variable "@"
使用语句SELECT @System::MachineName
或SELECT @@[System::MachineName]
会出现错误 'Error Incorrect systax near '::'
我不是试图将参数传递给查询。我已经搜索了一天但却找不到如何做这个简单的事情!
答案 0 :(得分:16)
这是一种可以做到这一点的方法。以下示例包是使用SSIS 2008 R2
创建的,并使用SQL Server 2008 R2作为后端。
dbo.PackageData
SQLServer
的OLE DB连接管理器以连接到您的数据库,比如连接到SQL Server数据库。Execute SQL Task
General
选项卡上,将Connection
属性设置为名为SQLServer的连接管理器。SQLStatement
中,输入插入语句 INSERT INTO dbo.PackageData (PackageName) VALUES (?)
Data Type
将为 VARCHAR
。将Parameter
名称设置为 0
,表示参数的索引值。单击“确定”按钮。
希望有所帮助。
答案 1 :(得分:1)
我之前从未使用它,但也许您可以在执行SQL任务中查看表达式的使用。
或者只是将整个查询放入一个变量的表达式,并将evaluateAsExpression设置为true。然后使用OLE DB进行插入
答案 2 :(得分:1)
根据我对@ ZERO答案的评论(在此作为答案重复,因此不会被SSIS新人忽视)。
OP的问题几乎是SSIS属性表达式的用例。
要将SSIS变量传递给查询字符串,可以将其连接到SqlStatementSource属性的表达式集中:
"INSERT INTO MYLOG (COL1) SELECT " + @[System::MachineName]
这并不是说接受的答案不是一个好的模式,因为一般来说,参数化方法比直接查询字符串操作更安全(针对SQL注入)和更快(重新使用)。但对于系统变量(与用户输入的字符串相反),此解决方案应该不受SQL注入的影响,如果重新使用,这将大致与参数化查询一样快或更快(因为机器名称不是'改变)。
答案 3 :(得分:0)