0

Je suis en train de créer une procédure stockée à utiliser dans mon API web en utilisant ASP.NET et C#. J'ai une table où il y a trois colonnes comme ceci:Rechercher dans une table en utilisant deux paramètres où l'un d'eux est une liste d'entiers

Id |TranName|ConfigName 
---|--------|---------- 
10 |ABC  |abcd 
11 |BDE  |bdef 
12 |FGH  |fghi 
13 |HIJ  |hijk 

Le problème est que j'utilise une autre procédure stockée qui retourne une liste d'entiers que je dois utiliser pour rechercher le tableau ci-dessus avec le TranName. Ainsi, par exemple, étant donné une liste d'entiers 9,10,11,12,13 et TranName BDE trouver le nom de configuration correspondant (dans ce cas, je pense qu'il doit correspondre à 11 pour l'Id, puis BDE pour le TranName et retourner bdef comme le nom de configuration

le code que j'ai pour la procédure stockée est comme indiqué ci-dessous. Je crée un tableau à utiliser comme paramètre pour rechercher dans le 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 

que quelqu'un peut me aider à résoudre le code de procédure stockée ?

+0

Pourquoi ne pas simplement passer dans la liste séparée par des virgules en tant que paramètre ou, mieux encore, un paramètre de table? – scsimon

+0

@scsimon Je ne comprends pas ce que vous proposez. – Koolkirtzz

+0

Vérifiez vos index qu'un candidat crée un index sur TransTable (TranName) include (Id) –

Répondre

3

Vous devez JOINDRE votre tableau au paramètre table comme ceci:

select ConfigName 
from TransTable as T join @list L 
     on T.Id = L.scrapeTranId 
where T.TranName = @TransName 
+0

Oui! C'est ce dont j'avais besoin. Je vous remercie! – Koolkirtzz