сохранить и использовать результат выбора оператора в сохраненном процессе? - PullRequest
3 голосов
/ 23 сентября 2011

Можно ли сохранить результаты запроса на выборку в сохраненном процессе, а затем использовать эти результаты из сохраненного процесса для дальнейшего запроса набора результатов?

Пример // мой сохраненный процесс(упрощенный пример)

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 ]

6 голосов
/ 23 сентября 2011

Вы хотите, чтобы users была табличной переменной или временной таблицей вместо типа nvarchar.

Версия табличной переменной

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

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

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

Temp Версия таблицы

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 ...
2 голосов
/ 23 сентября 2011

Вы можете использовать табличную переменную:

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

Хотя в зависимости от количества строк таблица #temp часто может быть более безопасной, поскольку в ней будет статистика, вы можете создавать дополнительные индексы и т. Д.

CREATE TABLE #users (...columns...);
INSERT #users SELECT * FROM dbo.Users;
1 голос
/ 23 сентября 2011

Вы можете использовать временную таблицу или переменную таблицы, чтобы сделать это. Вот сообщение в блоге , сравнивающее варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...