C# 使用两个参数在表中搜索,其中一个参数是整数列表
我正在尝试使用ASP.NET和C#创建一个存储过程,以便在web api中使用。我有一个表,其中有三列,如下所示:C# 使用两个参数在表中搜索,其中一个参数是整数列表,c#,sql-server,stored-procedures,asp.net-web-api,table-valued-parameters,C#,Sql Server,Stored Procedures,Asp.net Web Api,Table Valued Parameters,我正在尝试使用ASP.NET和C#创建一个存储过程,以便在web api中使用。我有一个表,其中有三列,如下所示: Id |TranName|ConfigName ---|--------|---------- 10 |ABC |abcd 11 |BDE |bdef 12 |FGH |fghi 13 |HIJ |hijk 问题是,我使用的是另一个存储过程,它返回一个整数列表,我必须使用该列表与TranName一起搜索上表。例如,给定一个整数列表9、10、11、1
Id |TranName|ConfigName
---|--------|----------
10 |ABC |abcd
11 |BDE |bdef
12 |FGH |fghi
13 |HIJ |hijk
问题是,我使用的是另一个存储过程,它返回一个整数列表,我必须使用该列表与TranName一起搜索上表。例如,给定一个整数列表9、10、11、12、13和TranName BDE,找到相应的ConfigName(在本例中,我希望它与Id的11匹配,然后与TranName的BDE匹配,并返回bdef作为ConfigName
存储过程的代码如下所示。我正在创建一个表,用作TransTable中要搜索的参数
CREATE TYPE dbo.ScrapeTranList
AS TABLE
(
scrapeTranId int
);
GO
CREATE PROCEDURE [dbo].[GetConfigNameById]
-- Add the parameters for the stored procedure here
@list AS dbo.ScrapeTranList READONLY,
@TransName varchar = null
AS
BEGIN
SET NOCOUNT ON;
select ConfigName
from TransTable as T
where T.TranName = @TransName AND T.Id IN @list
END
有人能帮我修复存储过程代码吗?您应该将表与表值参数连接起来,如下所示:
select ConfigName
from TransTable as T join @list L
on T.Id = L.scrapeTranId
where T.TranName = @TransName
您应该将表连接到表值参数,如下所示:
select ConfigName
from TransTable as T join @list L
on T.Id = L.scrapeTranId
where T.TranName = @TransName
为什么不把逗号分隔的列表作为参数传递,或者更好的是作为表参数传递?@scsimon我不明白你的建议。检查你的索引一个候选者是创建TransTable上的索引(TranName)include(Id)为什么不把逗号分隔的列表作为参数传递,或者更好的是作为表参数传递呢?@scsimon我不明白你的建议。检查你的索引一个候选者正在TransTable上创建索引(TranName)包括(Id)是的!这就是我需要的。谢谢!是的!这就是我需要的。谢谢!