gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:52:16 25 4
gpt4 key购买 nike

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

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 子句来实现,但我不确定我应该如何编写它。

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

最佳答案

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

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

关于sql-server - 重用 t-sql 表变量或克隆其结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18080678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com