设定一个全局变量,传入你需要的列,作为source查询语句的指定列,
---------------
这种方式只能是导入新表,否则的话,
在原来的表中必须指定对应的关系,这个貌似很难办到.

解决方案 »

  1.   

    导出excel的话,
    可以使用bcp等方式直接导出就行了,直接根据用户的选择,生成类似如下的SQL语句,
    INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=C:\testing.xls;', 
    'SELECT Name, Date FROM [Sheet1$]') 
    SELECT [Name], GETDATE() FROM msdb.dbo.sysjobs
    GO 
    非要使用SSIS的话,
    就按照我说的,
    程序开发一个页面给用户选择表和栏位,
    然后拼接成SQL脚本,作为全局变量的参数传给source的查询语句那个属性值即可.
    然后在source的查询语句中使用动态SQL完成就可以了,
      

  2.   

    感谢啊感谢!我自己做了个例子,但不好使,具体做法是这样:我先建了个脚本任务,让用户输入要导入的单元格的左上角和右下角,
    比如用户输入a1,b2,我就生成一个sql语句select * from [sheet1$a1:b2]  ,
    我将这个语句存储到变量里,然后建了个数据流任务,用oledb数据源连接excel,测试连接没有问题,
    在oledb数据源中的数据访问模式,我选择变量中的sql命令,变量名称为存储sql语句的变量,但这时必须给这个变量赋个初值,
    就可以在脚本任务里生成新的sql语句了。但是有几个问题:
    1.我最希望得到的结果是用户输入a1,b2,生成的sql语句是select [a1],[b2] from [sheet1$]。可是现在是个范围。而且不知道select语句的查找列能不能用参数?动态sql语句是怎么生成的?
    2.我不知道导出的是哪几列,比如我给变量赋初值:select * from sheet1$,一共3列,但如果新生成的sql语句是查询2列的话,就会出错:外部元数据列集合与数据源列不同步。请问,这个怎么解决呢?谢谢,,小弟刚开始学,实在是不明白。
      

  3.   

    1.我最希望得到的结果是用户输入a1,b2,生成的sql语句是select [a1],[b2] from [sheet1$]。可是现在是个范围。而且不知道select语句的查找列能不能用参数?动态sql语句是怎么生成的?
    --作为参数可以传入就可以.
    2.我不知道导出的是哪几列,比如我给变量赋初值:select * from sheet1$,一共3列,但如果新生成的sql语句是查询2列的话,就会出错:外部元数据列集合与数据源列不同步。请问,这个怎么解决呢? 
    --这个你有多少列就导出多少列就OK了,不会报错的啊.
      

  4.   

    1.--作为参数可以传入就可以.
    参数作为where条件可以,可以作为查找列么?比如我想导出A列和C列,输入A,C,能生成select [A],[C] from Sheet1$这样的语句么?
    2.--这个你有多少列就导出多少列就OK了,不会报错的啊.
    我在导出数据的时候没问题,可是向sqlserver目标导入的时候就出错了,因为我不知道导入的是哪列,所以没法映射啊,比如目标表有3列,而我只导出2列,就会出错:外部元数据列集合与数据源列不同步。
      

  5.   

    对于第二个问题,
    我在oledb源中的“数据访问模式”选择的是“变量中的sql命令”,变量名称选择自己定义的变量”strsql”,
    可是必须给strsql变量一个初始值,否则点击确定会出错。
    在运行程序后,通过脚本任务重新生成strsql,由oledb源调用,如果新生成的查询strsql中的列比strsql初始值的列少,就会出错:外部元数据列集合与数据源列不同步,因为在设置初始值的时候已经设置好了映射关系,而新生成的列少,就有列没有映射,就会出错,要是列相同或者新生成的多,就没事,但是新生成的列也不会映射到目标里,因为没建立映射这个问题真头疼,可能有很简单的方式解决,但我不会。
    谢谢hery!!!
    再帮帮忙把。