SQL:如何预测存储过程结果集?

时间:2010-06-03 19:06:07

标签: sql sql-server

简单的问题我无法弄明白(不是SQL专家......对不起):我想对sp_who2的结果集进行选择。我怎么能?

代表。从[sp_who2]的结果集中选择SPID

3 个答案:

答案 0 :(得分:3)

使用像这样的环回查询

    SELECT SPID, Status, Login, HostName, BlkBy,DBName, 
   Command, CPUTime, DiskIO, LastBatch, ProgramName
        INTO #TempSpWho2
        FROM OPENROWSET ('SQLOLEDB','Server=(local);TRUSTED_CONNECTION=YES;',
      'set fmtonly off exec master.dbo.sp_who2')

    SELECT * FROM #TempSpWho2

另见Store The Output Of A Stored Procedure In A Table Without Creating A Table

SQL Server 2005上的

以及使用sys.dm_exec_sessions和sys.dm_exec_requests

答案 1 :(得分:1)

来自here(但需要启用Ad Hoc Distributed Queries)

SELECT SPID,
        STATUS,
        Login,
        HostName,
        BlkBy,
        DBName,
        Command,
        CPUTime,
        DiskIO,
        LastBatch,
        ProgramName
   INTO #MyHead
   FROM OPENROWSET('SQLOLEDB',
   'Server=yourserverinstancehere;Trusted_Connection=Yes;Database=Master', 
                              'Set FmtOnly OFF; EXEC dbo.sp_Who2')

 SELECT * FROM #MyHead

或者来自here(但您可能需要根据您所使用的SQL Server版本调整列数)

CREATE TABLE #sp_who3 
( 
    SPID INT, 
    Status VARCHAR(32) NULL, 
    Login SYSNAME NULL, 
    HostName SYSNAME NULL, 
    BlkBy SYSNAME NULL, 
    DBName SYSNAME NULL, 
    Command VARCHAR(32) NULL, 
    CPUTime INT NULL, 
    DiskIO INT NULL, 
    LastBatch VARCHAR(14) NULL, 
    ProgramName VARCHAR(32) NULL, 
    SPID2 INT 
) 

INSERT #sp_who3 EXEC sp_who2 

根据您所使用的SQL Server版本,最好使用动态管理视图。

答案 2 :(得分:1)

您必须将结果插入表,临时表或表变量。

CREATE TABLE #sp_who2 (etc...)

INSERT INTO #sp_who2 EXECUTE sp_who2

SELECT * FROM #sp_who2 WHERE whatever...

另一个技巧是using OPENROWSET