我现在用SSIS在数据库之间导数据,但是在OLE DB连接管理器中的SQL命令文本中建临时表(#table)就报错,
不能在原来的数据库中建实际的表然后再删除,只能建临时表之类,请问有没有办法用?

解决方案 »

  1.   

    如果临时表不行的话,可以试试表变量。declare @tb table(col1 int,col2 int)
      

  2.   

    很简单,是先创建一个实际存在的表,借助这张表进行处理,处理完后Drop掉这张表。 
      

  3.   

    可以..在你的任务,或者组件中使用这个连接管理器..
    并将该连接管理器的RetainSameConnection属性设置为True;
      

  4.   

    好像不行吧大哥
    提示临时表#table对象无效
      

  5.   


    可以的呀.
    将你的连接管理器的RetainSameConnection属性设置为True,
    然后你的任务,组件,都使用上这个连接管理器..
    那就会认为他们是在同一条连接上.所以可以使用临时表.
      

  6.   

    做一个例子吧.先在"连接管理器"上.创建一个OleDb连接管理器.并连接上你的SQL Server;然后在控制流中.拖两个"执行SQL任务",并将第一个的绿色工作流拖到第二个当中.
    然后双击第一个"执行SQL任务".
    设置Connection为刚刚创建的OleDb连接管理器.
    Statement设置为Create Table #tb(id int);然后第二个"执行SQL任务"的Connection也设置为刚刚创建的OleDb连接管理器.
    Statement设置为 Drop Table #tb;---------
    如果现在这样运行的话,第二个"执行SQL任务"就会出错,并提示#tb表不存在.------------
    因为每个任务都会使用ConnectionManager提供的属性来创建自己的连接,
    所以各个连接中.临时表都是不可见的..
    -------如果现在将刚创建的Oledb连接管理器的RetainSameConnection属性设置为True,
    再运行,那两个任务都会执行成功.因为设置这个属性之后,
    使用上它的任务.都会视为是同一条连接.
      

  7.   

    小梁,顺便问一下,比如建立了A.xls的链接管理,要是删除这个excel文件好像报错,怎么关闭这个链接,然后在删除或者移动这个文件啊?
      

  8.   

    首先想问你,你用ole连接的数据源是什么,还是SQLServer吗,如果是应该不会报错才对,你把报错信息贴出来,如果不是Sql那么你的数据是否支持你写的创建临时表的语句呢