首页 > 解决方案 > 如何在存储过程中循环获取make输出

问题描述

我正在创建一个存储过程来title从名为Products. Products表包含名为 的列title。在我的 sql 服务器上,它已经为Product名为title. 下面给出了裸查询-

SELECT TOP 10000 KEY_TBL.[KEY] FROM CONTAINSTABLE (Products, Title, 'pot') AS KEY_TBL ORDER BY RANK DESC

注意:pot是关键字,我使用的是 Microsoft sql server

所以基本上它会返回那些pot在其标题上有行进关键字的产品ID。如果我现在运行上面的查询,我的结果看起来像下面 -

https://ibb.co/XJ9GHtC

现在我已将此查询插入到如下存储过程中。但问题是 - 因为我的查询只返回产品的 id 而不是它的标题,所以我需要循环这些产品 id,然后返回这些产品标题作为这个存储过程的输出。但是下面的查询不起作用,因为我缺少它的循环部分。任何人都可以给我提示我该如何实现这一目标?所以输出将返回产品标题而不仅仅是它的键 ID?

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetProductsByKeyword] 
    @Keyword nvarchar(255) = null
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @ItemsTable TABLE(
    title nvarchar(250)
    )


    DECLARE @Query NVARCHAR(MAX)

    SET @Query='SELECT TOP 10000 KEY_TBL.[KEY] FROM CONTAINSTABLE (Products, Title, @Keyword) AS KEY_TBL ORDER BY RANK DESC'





SELECT * FROM @ItemsTable           

    SET NOCOUNT OFF;

END;

标签: sqlsql-server

解决方案


您可能不需要循环,具体取决于您希望如何使用输出。

如果您只是直接在过程中执行 SQL 代码而不将其放入变量或循环中,那么结果将作为结果集直接从存储过程中返回。这与您在 SSMS 的查询窗口中运行 SQL 的结果相同。

如果您想以另一种格式、纯文本、XML、JSON 或 CSV 之类的其他格式返回结果,那么您还有其他选择。向我们提供有关您希望如何使用结果的更多信息,我们可以提供更多帮助。


推荐阅读