如何把SP的结果放到一个临时表上(要求临时表是自动创建的,不要用create table创建)
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.....?




