SSIS中能不能用临时表

chengpei_chen 2009-08-04 05:54:22
我现在用SSIS在数据库之间导数据,但是在OLE DB连接管理器中的SQL命令文本中建临时表(#table)就报错,
不能在原来的数据库中建实际的表然后再删除,只能建临时表之类,请问有没有办法用?
...全文
644 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ray_Zhang 2009-08-05
  • 打赏
  • 举报
回复
首先想问你,你用ole连接的数据源是什么,还是SQLServer吗,如果是应该不会报错才对,你把报错信息贴出来,如果不是Sql那么你的数据是否支持你写的创建临时表的语句呢
jiangshun 2009-08-05
  • 打赏
  • 举报
回复
小梁,顺便问一下,比如建立了A.xls的链接管理,要是删除这个excel文件好像报错,怎么关闭这个链接,然后在删除或者移动这个文件啊?
--小F-- 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 liangck 的回复:]
做一个例子吧.

先在"连接管理器"上.创建一个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,
再运行,那两个任务都会执行成功.因为设置这个属性之后,
使用上它的任务.都会视为是同一条连接.
[/Quote]
学习
liangCK 2009-08-05
  • 打赏
  • 举报
回复
做一个例子吧.

先在"连接管理器"上.创建一个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,
再运行,那两个任务都会执行成功.因为设置这个属性之后,
使用上它的任务.都会视为是同一条连接.
liangCK 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chengpei_chen 的回复:]
引用 5 楼 liangck 的回复:
可以..

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

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

可以的呀.
将你的连接管理器的RetainSameConnection属性设置为True,
然后你的任务,组件,都使用上这个连接管理器..
那就会认为他们是在同一条连接上.所以可以使用临时表.
chengpei_chen 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liangck 的回复:]
可以..

在你的任务,或者组件中使用这个连接管理器..
并将该连接管理器的RetainSameConnection属性设置为True;
[/Quote]
好像不行吧大哥
提示临时表#table对象无效
chengpei_chen 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chinajiabing 的回复:]
试一下..
[/Quote]
好像不行吧
  • 打赏
  • 举报
回复
楼主,先建立一个临时表,然后给这个临时表取一个同义词看看。
htl258_Tony 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liangck 的回复:]
可以..

在你的任务,或者组件中使用这个连接管理器..
并将该连接管理器的RetainSameConnection属性设置为True;
[/Quote]学习
soft_wsx 2009-08-04
  • 打赏
  • 举报
回复
SSIS还没用过呢?只能顶贴
SQL77 2009-08-04
  • 打赏
  • 举报
回复
按楼上的所说,试试建立表变量试试
liangCK 2009-08-04
  • 打赏
  • 举报
回复
可以..

在你的任务,或者组件中使用这个连接管理器..
并将该连接管理器的RetainSameConnection属性设置为True;
ChinaJiaBing 2009-08-04
  • 打赏
  • 举报
回复
试一下..
xiequan2 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 chengpei_chen 的回复:]
我现在用SSIS在数据库之间导数据,但是在OLE DB连接管理器中的SQL命令文本中建临时表(#table)就报错,
不能在原来的数据库中建实际的表然后再删除,只能建临时表之类,请问有没有办法用?
[/Quote]
很简单,是先创建一个实际存在的表,借助这张表进行处理,处理完后Drop掉这张表。
sdhdy 2009-08-04
  • 打赏
  • 举报
回复
如果临时表不行的话,可以试试表变量。

declare @tb table(col1 int,col2 int)
SQL77 2009-08-04
  • 打赏
  • 举报
回复
顶,

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧