根据 Table 值参数筛选 table 并将 TVP 值插入 Select
Filter table based on Table Valued Parameter and Insert TVP value into Select
我有一个包含两个字段的 TVP。
sentence_id 是 table 中 select 条记录的过滤器,这非常有效。 TVP 还包含一个关键字。 TVP 看起来像这样:
Create TYPE [dbo].[sentence_id_list2] AS TABLE(
[sentence_id] [nvarchar](50) NOT NULL,
[keyword] [nvarchar](50)
)
我想在结果中为相同的 sentence_id 传递该关键字,因此它看起来像这样:
Sentence_Identifier,Keyword,Sentence
123, curious, hello donna, i have a curious problem
其中从TVP传入的sentence_id为123,关键字好奇
这是我的存储过程,只是不知道如何在结果中包含关键字。
ALTER Procedure [dbo].[chat_Get_Sentences_Table_Value_Parameter]
@sentence_keys [dbo].[sentence_id_list2] READONLY
AS
SELECT TOP (100) PERCENT dbo.chat_All_Records_Sentence_Details.Sentence_Identifier,
dbo.chat_All_Records_Sentence_Details.Sentence,
-- how do I write this to insert the keyword from the TVP into the select?
(SELECT keyword FROM @sentence_keys) AS Keyword
FROM dbo.chat_All_Records_Sentence_Details
WHERE (dbo.chat_All_Records_Sentence_Details.Sentence_Identifier
IN (SELECT sentence_id FROM @sentence_keys))
而不是使用 IN
简单地使用 INNER JOIN
:
SELECT d.Sentence_Identifier,
d.Sentence,
sk.keyword
FROM chat_All_Records_Sentence_Details AS d
INNER JOIN @sentence_keys AS sk
ON sk.sentence_id = d.Sentence_Identifier;
我已经删除了 TOP 100 PERCENT
,因为无论如何这都会被优化掉,并且还使用了别名,这样您的标识符就不会那么长。
我有一个包含两个字段的 TVP。
sentence_id 是 table 中 select 条记录的过滤器,这非常有效。 TVP 还包含一个关键字。 TVP 看起来像这样:
Create TYPE [dbo].[sentence_id_list2] AS TABLE(
[sentence_id] [nvarchar](50) NOT NULL,
[keyword] [nvarchar](50)
)
我想在结果中为相同的 sentence_id 传递该关键字,因此它看起来像这样:
Sentence_Identifier,Keyword,Sentence
123, curious, hello donna, i have a curious problem
其中从TVP传入的sentence_id为123,关键字好奇
这是我的存储过程,只是不知道如何在结果中包含关键字。
ALTER Procedure [dbo].[chat_Get_Sentences_Table_Value_Parameter]
@sentence_keys [dbo].[sentence_id_list2] READONLY
AS
SELECT TOP (100) PERCENT dbo.chat_All_Records_Sentence_Details.Sentence_Identifier,
dbo.chat_All_Records_Sentence_Details.Sentence,
-- how do I write this to insert the keyword from the TVP into the select?
(SELECT keyword FROM @sentence_keys) AS Keyword
FROM dbo.chat_All_Records_Sentence_Details
WHERE (dbo.chat_All_Records_Sentence_Details.Sentence_Identifier
IN (SELECT sentence_id FROM @sentence_keys))
而不是使用 IN
简单地使用 INNER JOIN
:
SELECT d.Sentence_Identifier,
d.Sentence,
sk.keyword
FROM chat_All_Records_Sentence_Details AS d
INNER JOIN @sentence_keys AS sk
ON sk.sentence_id = d.Sentence_Identifier;
我已经删除了 TOP 100 PERCENT
,因为无论如何这都会被优化掉,并且还使用了别名,这样您的标识符就不会那么长。