sql - 如何在另一个存储过程中使用存储过程的结果?

标签 sql sql-server stored-procedures

我有一个存储过程,我想从另一个存储过程中调用它,然后循环访问结果。有点像在存储过程中使用游标而不是 SQL select 语句。我不太明白该怎么做。

我可以得到这样的整个结果:

DECLARE @result int;
EXEC @result = sp_who;
PRINT @result;

有趣的是,这似乎将 @result 的类型更改为 int 以外的类型,但无论如何。然后我如何逐行循环结果?如何访问各个列中的数据?例如,我如何终止第四列(登录名)类似于“%gatesb”或其他内容的进程?

最佳答案

您可以声明一个表变量来保存存储过程的结果,然后在 while 循环中循环遍历它们:

declare @temp table (
    idx int identity(1,1),
    field1 int,
    field2 varchar(max))

declare @result int

insert into @temp (field1, field2)
exec @result = sp_who

declare @counter int

set @counter = 1

while @counter < (select max(idx) from @temp)
begin
    -- do what you want with the rows here
    set @counter = @counter + 1
end

关于sql - 如何在另一个存储过程中使用存储过程的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/861187/

相关文章:

sql - 使用合并的逗号分隔列表

sql - ActiveRecord 查询在 DISTINCT 之后强制执行 ORDER BY

php - 使用 PHP 将带毫秒的时间戳插入到 Postgres 表中

c# - 批量导出到 CSV

sql - 在数据库中存储时间值并获取两个时间字段之间的差异

sql - 获取 'ORA-00907: missing right parenthesis' ,找不到错误

sql - 选择子查询中出现次数最多的属性

azure - 文档数据库 : How to run a query without timing out

postgresql - 如何修复此 PostgreSQL 9.1 存储过程?

sql - 如何创建 SQL 脚本?