我正在编写存储过程来对不同存储过程的结果进行分页。我通过执行存储过程并将结果插入表变量来做到这一点:
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],
...
);
有没有办法做到这一点?也许有一种方法可以克隆表变量?我想可以使用带有输出子句的删除来实现同时删除和过滤,但我不确定我应该如何编写它。
我讨厌重复代码。也许您知道一个简单的解决方案:)