如何有条件的提取存储过程返回的记录集?

cadinfo 2003-09-21 05:34:36
例如sp_who可以查看当前访问数据库的所有进程
如何根据 @@SPID 来返回当前进程访问的那条记录?

--------------------------------
例题如下:
exec sp_who
1 0 background sa 0 NULL LAZY WRITER
2 0 sleeping sa 0 NULL LOG WRITER
3 0 background sa 0 master SIGNAL HANDLER
4 0 background sa 0 NULL LOCK MONITOR
5 0 background sa 0 master TASK MANAGER
6 0 background sa 0 master TASK MANAGER
7 0 sleeping sa 0 NULL CHECKPOINT SLEEP
8 0 background sa 0 master TASK MANAGER
9 0 background sa 0 master TASK MANAGER
10 0 background sa 0 master TASK MANAGER
11 0 background sa 0 master TASK MANAGER
12 0 background sa 0 master TASK MANAGER
13 0 background sa 0 master TASK MANAGER
51 0 runnable BILLGATES\EPox8KHA-DDR BILLGATES 0 master SELECT
52 0 sleeping BILLGATES\EPox8KHA-DDR BILLGATES 0 master AWAITING COMMAND

select @@spid
51

如何得到如下记录
51 0 runnable BILLGATES\EPox8KHA-DDR BILLGATES 0 master SELECT
...全文
22 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
leimin 2003-09-22
  • 打赏
  • 举报
回复
如何根据 @@SPID 来返回当前进程访问的那条记录?
好像不可以
playyuer 2003-09-22
  • 打赏
  • 举报
回复
SELECT a.*
FROM OPENROWSET('SQLOLEDB','LOCALHOST\PSQL2KDEV';'sa';'',
'sp_who') AS a
where spid=7

--需要在 SQL 中指定 login/password,相当于又登陆连接一次
playyuer 2003-09-22
  • 打赏
  • 举报
回复
openrowset
cadinfo 2003-09-22
  • 打赏
  • 举报
回复
果然是采用与返回结构相同的临时表

还有没有简单一些的方法呢?

不是:
select * from tbl1 into table tbl2
可以直接生成表2,对于这样的存储过程可否实现呢

或者直接select ... from exec sp_who,我试过不行的?
愉快的登山者 2003-09-21
  • 打赏
  • 举报
回复
create table #t(
spid int,
status varchar(100),
loginame varchar(100),
hostname varchar(100),
blk int,
dbname varchar(100),
cmd varchar(100))

insert #t exec sp_who

select * from #t where spid = @@spid

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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