在存储过程中存储和使用select语句结果?

时间:2011-09-23 18:12:16

标签: sql sql-server tsql stored-procedures

是否可以将选择查询的结果存储在存储过程中,然后在存储过程中使用这些结果来进一步查询结果集?

示例 //我的存储过程(简化示例)

ALTER PROCEDURE [dbo].[users]  
AS
BEGIN

    Declare @users nvarchar(1000)            

        set @users = select * from users


    // query @users result for counts, sums where clauses, etc...


END

3 个答案:

答案 0 :(得分:6)

您希望users是表变量或临时表而不是nvarchar类型。

表变量版

DECLARE @users TABLE (
    UserId int,
    ...
)

INSERT INTO @users
    (UserId, ...)
    SELECT *
        FROM users

SELECT *
    FROM AnotherTable t
        INNER JOIN @users u
            ON ...

临时表版本

CREATE TABLE #users (
    UserId int,
    ...
)

INSERT INTO #users
    (UserId, ...)
    SELECT *
        FROM users

SELECT *
    FROM AnotherTable t
        INNER JOIN #users u
            ON ...

您也可以隐式创建临时表。

SELECT *
    INTO #users
    FROM users

SELECT *
    FROM AnotherTable t
        INNER JOIN #users u
            ON ...

答案 1 :(得分:2)

您可以使用表变量:

DECLARE @users TABLE (...columns...);
INSERT @users SELECT * FROM dbo.Users;

虽然取决于行数,但#temp表通常更安全,因为它将具有统计信息,您可以创建其他索引等。

CREATE TABLE #users (...columns...);
INSERT #users SELECT * FROM dbo.Users;

答案 2 :(得分:1)

您可以使用临时表或表变量来执行此操作。这是一个比较选项的blog post