Повторно использовать табличную переменную 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