Повторно использовать табличную переменную t-sql или клонировать ее структуру

Я пишу хранимую процедуру, чтобы разбить на страницы результаты другой хранимой процедуры. Я делаю это, выполняя хранимую процедуру и вставляя результаты в переменную таблицы:

DECLARE @allResults table
(
    [ID] [int] NOT NULL,
    [DESCRIPTION] [varchar](MAX) NULL,
    [COL1] [VARCHAR],
    [COL2] [VARCHAR],
    ...
);

INSERT @allResults Exec [dbo].[GetResults];

Мне нужно отфильтровать результаты и сохранить их где-нибудь, потому что я буду использовать отфильтрованные результаты как минимум в двух местах: для подсчета всех записей и фактического разбивки на страницы. В идеале я хотел бы повторно использовать таблицу @allResults, поскольку после фильтрации мне больше не нужно ее содержимое. Что-то похожее:

@allresults = @allresults where [DESCRIPTION] like '%keyword%'

Я не совсем уверен, как я могу обрезать таблицу в тот же момент, когда я ее фильтрую. Вот почему я создал вторую переменную таблицы с той же структурой:

DECLARE @filteredResults table
(
    [ID] [int] NOT NULL,
    [DESCRIPTION] [varchar](MAX) NULL,
    [COL1] [VARCHAR],
    [COL2] [VARCHAR],
    ...
);

Это не плохое решение, и оно работает. Но мне интересно, могу ли я повторно использовать определение табличной переменной? Нечто похожее на это:

DECLARE @filteredResults, @allResults table
(
    [ID] [int] NOT NULL,
    [DESCRIPTION] [varchar](MAX) NULL,
    [COL1] [VARCHAR],
    [COL2] [VARCHAR],
    ...
);

Есть ли способ сделать это? Может быть, есть способ клонировать переменную таблицы? Я предполагаю, что одновременное удаление и фильтрация могут быть достигнуты с помощью предложения delete with output, но я не совсем уверен, как мне его написать.

Я ненавижу повторять код. Может быть, вы знаете простое решение:)

1 ответ

Решение

Вы можете создать свой собственный тип таблицы пользователя:

CREATE TYPE dbo._t_test AS TABLE(
    [ID] [int] NOT NULL,
    [DESCRIPTION] [varchar](MAX) NULL,
    [COL1] [VARCHAR],
    [COL2] [VARCHAR]
)
GO

И затем создайте переменные таблицы следующим образом:

DECLARE @filteredResults dbo._t_test
    , @allResults dbo._t_test
Другие вопросы по тегам