Sql server 重用t-sql表变量或克隆其结构

Sql server 重用t-sql表变量或克隆其结构,sql-server,tsql,stored-procedures,table-variable,Sql Server,Tsql,Stored Procedures,Table Variable,我编写存储过程是为了对不同存储过程的结果进行分页。我通过执行存储过程并将结果插入表变量来实现: DECLARE@allResults表 ( [ID][int]不为空, [说明][varchar](最大值)NULL, [COL1][VARCHAR], [COL2][VARCHAR], ... ); 插入@allResults Exec[dbo].[GetResults]; 我需要过滤结果并将其存储在某处,因为我将在至少两个位置使用过滤结果:统计所有记录和实际分页。理想情况下,我希望重用@allR

我编写存储过程是为了对不同存储过程的结果进行分页。我通过执行存储过程并将结果插入表变量来实现:

DECLARE@allResults表
(
[ID][int]不为空,
[说明][varchar](最大值)NULL,
[COL1][VARCHAR],
[COL2][VARCHAR],
...
);
插入@allResults Exec[dbo].[GetResults];
我需要过滤结果并将其存储在某处,因为我将在至少两个位置使用过滤结果:统计所有记录和实际分页。理想情况下,我希望重用@allResults表,因为过滤后我不再需要它的内容。类似于:

@allresults=@allresults其中[DESCRIPTION]类似于“%keyword%”
我不确定如何在筛选表的同时截断它。这就是我创建具有相同结构的第二个表变量的原因:

DECLARE@filteredResults表
(
[ID][int]不为空,
[说明][varchar](最大值)NULL,
[COL1][VARCHAR],
[COL2][VARCHAR],
...
);
这是一个不错的解决方案,而且很有效。但我想知道是否可以重用表变量的定义?看起来像是:

DECLARE@filteredResults,@allResults表
(
[ID][int]不为空,
[说明][varchar](最大值)NULL,
[COL1][VARCHAR],
[COL2][VARCHAR],
...
);
有办法吗?也许有办法克隆表变量?我想使用delete with output子句可以实现同时删除和过滤,但我不确定该如何编写它


我讨厌重复代码。也许您知道一个简单的解决方案:)

您可以创建自己的用户表类型:

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

你能把过滤条款颠倒过来吗<代码>从@allresults中删除,其中[DESCRIPTION]与“%keyword%”不同。?另外,2k8中的CTE+行数允许更有效的分页方法。可以转换筛选器子句。不确定这样做的性能。有了这个解决方案,我根本不需要第二个变量。它确实有助于避免这个问题。在过滤之后,我确实使用行号进行分页,但我使用子查询进行分页(因为我觉得CTE很可怕,很难理解;),这将有助于重复。创建后,此类型属于创建它时所在的数据库还是在数据库之间共享?来自MSDN:在当前数据库中创建别名数据类型或用户定义的类型。