CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

如何把SP的结果放到一个临时表上(要求临时表是自动创建的,不要用create table创建)

楼主highscore2(谢谢你的回答:p)2006-03-04 10:56:52 在 MS-SQL Server / 基础类 提问

Create   Table   #Temp   (...)  
  Insert   Into   #temp   exec   sp_Get_2Num_Combined_Ration  
  能够把sp的结果集放到#temp上  
   
  但我不想用Create   Table   #Temp   ,因为我要做到通用性.  
  希望有类似   select   *   into   #temp   from   ...   这种方法,不用写语句创建#temp的.  
   
  问题点数:100、回复次数:27Top

1 楼msjqd(黑色幽默)回复于 2006-03-04 11:07:03 得分 0

select   Into   #temp   exec   sp_Get_2Num_Combined_Ration  
  Top

2 楼softj(天地客人<最近很迷茫>)回复于 2006-03-04 11:09:18 得分 0

select   into   #table   exec   过程Top

3 楼wgsasd311(自强不息)回复于 2006-03-04 11:18:50 得分 0

没有办法Top

4 楼lsqkeke(可可)回复于 2006-03-04 11:41:03 得分 0

select   into   #table   exec   过程  
  Top

5 楼lsqkeke(可可)回复于 2006-03-04 11:41:55 得分 5

create   table   #table1(     )  
  insert   into   #table1   exec   过程Top

6 楼highscore2(谢谢你的回答:p)回复于 2006-03-04 21:57:24 得分 0

1.select   into   #table   exec   过程  
   
  2.create   table   #table1(     )  
  insert   into   #table1   exec   过程  
   
  两种都不行!!!   是不是没有办法了???  
  Top

7 楼wgsasd311(自强不息)回复于 2006-03-04 22:37:20 得分 10

两种都不行!!!   是不是没有办法了???  
  =======>  
  我在CSDN上也混了好长时间了,还没有看到谁行.  
  都是事先建好表的,没用自动通过存储过程生成表结构及表内容的.Top

8 楼highscore2(谢谢你的回答:p)回复于 2006-03-05 11:36:59 得分 0

这么有用的功能怎么SQL语句不支持呀!   事先create   table的话,通用性不好,而且如果SP修改了的话,运行就会有错误了.    
  这种方法还是尽可能不用了.  
   
  不知高手们有什么办法代替?   我把分加到100分  
   
  Top

9 楼wgsasd311(自强不息)回复于 2006-03-06 08:55:37 得分 0

帮你顶下,我也很希望能够有更好的办法.Top

10 楼mislrb(上班看看早报,上上CSDN,下班看看电影)回复于 2006-03-06 09:18:25 得分 0

改成FUNCTION,返回表结果  
  然后再select   *   into   #tTop

11 楼highscore2(谢谢你的回答:p)回复于 2006-03-06 10:39:48 得分 0

楼上的说详细一点吧  
  select   *   into   #t   from   dbo.FunctionName(...)   这样的SQL是否合法??  
   
  function能否返回表变量   @table   ??  
   
   
  Top

12 楼lzhs(快乐至上)回复于 2006-03-06 11:16:56 得分 10

明确的说,是不行的.  
  1、在存储过程中的方法上面己经试过了,不行。  
  2、在函数中,也不可能以表名为变量返回该表的内容的。(这个内容在CSDN上有讨论过)  
   
  也许还有隐藏的达人知道其他的方法。Top

13 楼lzhs(快乐至上)回复于 2006-03-06 12:01:20 得分 0

...  
  我想到一个变通的方法,就是用全局临时表,但是这个方法的缺点就是临时表的名称是固定死的,而且在多个地方同时调用这个存储过程的时候,可能会出错!  
   
  Create   Proc   pGetInfo  
  @T   varchar(10)  
  As  
  Drop   Table   ##Temp  
  Exec('Select   *   Into   ##Temp   From   '+@T)  
   
  Select   *   From   ##TempTop

14 楼zjcxc(邹建)回复于 2006-03-06 12:17:02 得分 60

--   用openrowset之类的转一下就行了  
   
  select   *   into   #  
  from   openrowset('sqloledb','localhost';'sa';'sa的密码','exec   库名..你的存储过程名')Top

15 楼highscore2(谢谢你的回答:p)回复于 2006-03-08 20:55:03 得分 0

zjcxc(邹建)   老大就是厉害!   我去试试,回来结贴.Top

16 楼highscore2(谢谢你的回答:p)回复于 2006-03-11 15:01:43 得分 0

试了openrowset   的方法还是不行,   我的SP临时表返回结果集  
  select   *   from   #temp    
  当执行类似以下的SQL语句时,返回错误信息"对象名#temp无效"  
  select   *   into   #  
  from   openrowset('sqloledb','localhost';'sa';'sa的密码','exec   库名..你的存储过程名')  
   
  还有就是这种方法的缺点是要加上登录用户及密码,能不能省略用户及密码部分???  
   
  Top

17 楼xeqtr1982(Visual C# .NET)回复于 2006-03-11 15:28:15 得分 0

学习老大:)就是牛啊Top

18 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-03-11 15:33:15 得分 10

--用信任连接  
  select   *   from   openrowset('sqloledb','Trusted_Connection=yes','exec   数据库名.dbo.存储过程名')    
   
   
  或  
   
  select   *   from   openrowset('sqloledb','Trusted_Connection=yes','exec   数据库名..存储过程名')    
  Top

19 楼flashspider(还没想好)回复于 2006-03-11 15:49:57 得分 0

收藏先!Top

20 楼qwnqy(厚德载物)回复于 2006-03-11 16:36:11 得分 0

收藏先!  
  Top

21 楼highscore2(谢谢你的回答:p)回复于 2006-03-11 19:42:59 得分 0

再说一下,我的sp返回了一个临时表的结果集最后一句sql语句是   select   *   from   #temp  
   
  但用上面的方法,调用后提示   对象#temp无效!!Top

22 楼zjcxc(邹建)回复于 2006-03-11 20:17:43 得分 0

--   使用windows身份验证,   这样不用指定用户和密码  
  select   *   from   openrowset('sqloledb'  
  ,'Trusted_Connection=yes'  
  ,'exec   你的存储过程名')Top

23 楼zjcxc(邹建)回复于 2006-03-11 20:18:20 得分 0

无论是openrowset还是opensource,   都不可能对所有的存储过程都能使用Top

24 楼highscore2(谢谢你的回答:p)回复于 2006-03-11 20:45:38 得分 0

都不可能对所有的存储过程都能使用  
  =========================================  
  我的SP用   select   *   from   #temp   来返回结果集,难道这样都不支持吗?     谢谢!Top

25 楼highscore2(谢谢你的回答:p)回复于 2006-03-11 21:02:55 得分 0

不用临时表的话,可以用这种方法,   只要SP中用上临时表就会有错误!!!    
  请问这是BUG?   还是SQL   SERVER本身不支持?   打补丁可以解决吗??Top

26 楼zjcxc(邹建)回复于 2006-03-12 12:39:11 得分 0

算是支持性(或者兼容性)的问题吧,   在2005中都还存在这样的一些问题Top

27 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-03-12 15:05:54 得分 5

不用临时表的话,可以用这种方法,   只要SP中用上临时表就会有错误!!!    
  请问这是BUG?   还是SQL   SERVER本身不支持?   打补丁可以解决吗??  
   
  -------------------------------------------------  
  至少SQL   Server   2000存在这样的问题  
  Top

相关问题

  • 如何在程序中创建一个*.mdb,创建一个Table.
  • sql2000: 关于创建访问linkedserver的sp
  • ++++++++用SP创建新表的问题+++++++++
  • 创建一个参数类,想全局使用,该放到哪
  • alter table创建字段问题
  • vb怎么动态创建table
  • 动态创建了一个ClientSocket放到串里如何读出来?
  • 请问如何动态创建frame,并把frame放到tabcontrol或pagecontrol中去,当tabindex改变时关闭frame,创建令一个新的
  • 用php如何创建一个mysql的table?
  • 创建临时表用Tquery还是用!table->exsists.....?

关键词

  • 存储过程
  • 语句
  • 密码
  • sa
  • 内容
  • 表
  • 临时
  • openrowset
  • exec
  • 方法

得分解答快速导航

  • 帖主:highscore2
  • lsqkeke
  • wgsasd311
  • lzhs
  • zjcxc
  • wangtiecheng
  • wangtiecheng

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo