怎么样才可以把系统存储过程的结果写到结果集里?

skt985 2001-11-28 06:20:41
在SQL Server里
怎么样才可以把系统存储过程的结果写到结果集里?
比如:

select * from ( exec sp_help table_name)

越简短越好,一定给分!!!!!!!!
...全文
127 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt985 2001-11-29
  • 打赏
  • 举报
回复
复:N_chow(一劍飄香) 
我现在只有执行单个查询语句的权限
我自己也没有login用户和密码啊

另:不一定要执行sp_help
大家认为xp_cmdshell dir *.txt 的结果集又会如何呢?
IronPromises 2001-11-29
  • 打赏
  • 举报
回复
select
'Name' = o.name,
'Owner' = user_name(uid),
'Type' = substring(v.name,5,31),
'Created_datetime' = o.crdate
from sysobjects o, master.dbo.spt_values v
where o.id = object_id('你的表名') and o.xtype = substring(v.name,1,2) and v.type = 'O9T'
N_chow 2001-11-29
  • 打赏
  • 举报
回复
sp_help tablename 會返回一打的結果集,所以你的要求是不現實的。
假如說SP只會返回一個結果集,則用這面這種方法就可以了。

SELECT a.*
FROM OPENROWSET('SQLOLEDB','ServerName';'sa';'Password',
' exec SPName ') AS a
GO
IronPromises 2001-11-29
  • 打赏
  • 举报
回复
Sp_help出来的是多个结果集!!!

而且你的表结构和那一个结果集都不会一样,怎幺union???

麻烦你自己理顺思绪.不要浪费大家的时间.

还有,你如果要看表结构,可以这样选取一个结果集:

select
'Column_name' = name,
'Type' = type_name(xusertype),
'Computed' = case when iscomputed = 0 then 'no' else 'yes' end,
'Length' = convert(int, length),
'Prec' = case when charindex(type_name(xtype), N'tinyint,smallint,decimal,int,real,money,float,numeric,smallmoney') > 0
then convert(char(5),ColumnProperty(id, name, 'precision'))
else ' ' end,
'Scale' = case when charindex(type_name(xtype), N'tinyint,smallint,decimal,int,real,money,float,numeric,smallmoney') > 0
then convert(char(5),OdbcScale(xtype,xscale))
else ' ' end,
'Nullable' = case when isnullable = 0 then 'no' else 'yes' end,
'TrimTrailingBlanks' = case ColumnProperty(object_id('你的表名'), name, 'UsesAnsiTrim')
when 1 then 'no'
when 0 then 'yes'
else '(n/a)' end,
'FixedLenNullInSource' = case
when type_name(xtype) not in ('varbinary','varchar','binary','char')
Then '(n/a)'
When status & 0x20 = 0 Then 'no'
Else 'yes' END
from syscolumns where id = object_id('你的表名') order by colid
skt985 2001-11-29
  • 打赏
  • 举报
回复
to IronPromises
我必须在一个select语句里完成这些!!
N_chow 2001-11-29
  • 打赏
  • 举报
回复
>>复:N_chow(一劍飄香) 
>>我现在只有执行单个查询语句的权限
>>我自己也没有login用户和密码啊

這也不行,那也不行,看來得使出絕招來啦。

EXEC sp_serveroption 你的SQLServer名字, 'data access' , 'true'
select * from OpenQuery (你的SQLServer名字,'SET FMTONLY OFF EXEC SP_HelpUser')

IronPromises 2001-11-28
  • 打赏
  • 举报
回复
sp_help是返回很多东西.

你可以用
sp_helptext sp_help
看看语句是怎么运行的.

然后仿真它.
flowerofwind 2001-11-28
  • 打赏
  • 举报
回复
是吗?我这儿有sybase试了一下,返回很多东西
如果sqlserver的sp_help返回单列的结果集,可以按照IronPromises(铁诺)的做法
skt985 2001-11-28
  • 打赏
  • 举报
回复
to flowerofwind(现实很残酷)
sp_help返回的是单列的数据集
IronPromises 2001-11-28
  • 打赏
  • 举报
回复
先建立一临时表
该表结构和调用系统sp出来的结果集一样.

然后:

insert into #temp1 exec 某某系统sp

flowerofwind 2001-11-28
  • 打赏
  • 举报
回复
sp_help table_name返回的是一大堆的结果集,包括与这个表相关的一切信息,怎么和一个表的内容union,我觉得很难
某鸟 2001-11-28
  • 打赏
  • 举报
回复
好像得用odbc了!
skt985 2001-11-28
  • 打赏
  • 举报
回复
我前面有个语句是
select colname form tablename1
我想达到
select colname form tablename1
union all
select * from ( exec sp_help table_name)
如何实现??
flowerofwind 2001-11-28
  • 打赏
  • 举报
回复
系统存储过程返回的本来就是结果集,不明白你为什么要这么做

34,593

社区成员

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

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