2017-05-01 57 views
0

我根据Hadi给出的解决方案编辑了问题。SSIS - SQL命令 - 参数

我在VS 2013中使用SSIS。 我有一个名为MyVariableList和Query的用户变量。 enter image description here

这是在用户变量查询表达式: “SELECT可乐,COLB FROM myTable的WHERE本身份识别码IN(” + @ [用户:: MyVariableList] + “)” enter image description here

我有一个脚本任务设置@ [User :: MyVariableList]的值。

Dts.Variables["User::MyVariableList"].Value = sList; 

enter image description here

在那之后,我有一个数据流任务使用OLE DB源(从1个数据库)到另一个OLE DB目标(另一台服务器上的另一个数据库)。 在OLE DB源代码编辑器,我设置 数据访问模式:SQL命令从变量 变量名:用户::查询 enter image description here

在OLE DB源连接,我已经设置了DelayValidation为True enter image description here

之前,我甚至可以运行该软件包,我得到这个错误 enter image description here 我该如何解决这个问题?谢谢

+1

如果你想使用分隔字符串逗号一样,你需要使用动态SQL,这是使用表达式实现的。你不能使用参数来做到这一点。请参阅以下参考资料:https://jamessummerlin.com/2015/05/04/ssis-using-expressions-to-build-sql-statements-for-ado-net-connections/ http://stackoverflow.com/questions/ 17071451/ssis-passing-sql-command-as-variable-to-ole-db-source –

+0

MyProjectVariable属于String类型,如果使用2个int类型的参数并传递这些参数,那么它将起作用。 – observer

+2

Man!你在得到答案并接受答案后改变了整个问题?最好问一个新的,这不是堆栈溢出工作的方式! @faujong –

回答

1

首先,你是一个project parameter工作不是一个project variable

你不能这样使用参数化的SQL命令实现,你必须建立一个变量中整个查询,并把它作为源(SQL命令从变量)

参数用于指定单个值,而不是串联的查询字符串

创建一个SSIS变量(User::Query),将变量Evaluate As Expression属性更改为True,并在变量Expression属性中写入表达式。像下面

"SELECT cola, colB FROM myTable WHERE myID IN (" + @[$Project::MyProjectVariable] + ")" 

注:使用工程参数的表达式中使用的语法如下:@[$Project::MyProjectVariable]

+0

谢谢大家。我做了Hadi的建议,但是当我在之前的脚本任务中设置MyProjectVariable(而不是硬编码值)时,在我运行包之前,我已经在OLE DB Source中出错了:“声明无法准备“。和“附近语法错误”)“。”。在OLE DB源编辑器中,变量值是“SELECT cola,colB FROM myTable WHERE myID IN()” - >这是因为MyProjectVariable在脚本任务中设置。总之,我从1个数据库查询得到结果,从这个结果中,我想查询另一个数据库。这是做这件事的最好方法吗?谢谢。 – faujong

+0

将oledb源'Delay Validation'属性设置为'True' – Hadi

+0

谢谢哈迪。在OLEDB源连接中,我将“DelayValidation”设置为true,但仍然出现错误 – faujong