我正在创建一个存储过程,以从名为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。如果我现在运行以上查询,我的结果看起来像是波纹管
现在,我已将此查询插入到存储过程中,例如波纹管。但问题是-由于我的查询仅返回产品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;
答案 0 :(得分:0)
根据您希望如何使用输出,您可能不需要循环。
如果仅在过程内部直接执行SQL代码而不将其放入变量或循环中,则结果将作为结果集直接从存储过程中返回。就像在SSMS的查询窗口中运行SQL一样,结果也是如此。
如果要以其他格式(纯文本,XML,JSON或CSV等其他格式)返回结果,则可以有其他选择。 给我们更多有关您如何使用结果的信息,我们可以提供更多帮助。