2017-08-21 3 views
0

Je reçois la clause comme ceci # ff0000, '# 000'. Mais le problème est que je dois passer des valeurs à une procédure stockée en tant que paramètre pour obtenir les noms de couleurs en fonction de ces codes de couleur.Comment faire pour passer des valeurs séparées par des virgules dans la clause dans la procédure stockée

Voici ma procédure stockée

@ColorCode NVARCHAR(150) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT * 
    FROM color 
    WHERE code IN (@ColorCode) 

que je veux transmettre ces valeurs pour la clause IN, à l'aide d'un paramètre. Comment puis-je faire ceci?

S'il vous plaît suggèrent

+3

Chaque fois que vous même * penser * sur l'utilisation de valeurs séparées par des virgules, 100 chatons sont tués ..... *** Ne fais pas ça! ** * Il y a ** beaucoup mieux ** façons de le faire !! Découvrez [** paramètres table-valeur **] (https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/table-valued-parameters) dans SQL Server 2008 et plus! –

Répondre

0

Essayez cette

CREATE PROCEDURE Usp_split 
(
@ColorCode NVARCHAR(150) 
) 
AS 
    BEGIN 
     -- SET NOCOUNT ON added to prevent extra result sets from 
     -- interfering with SELECT statements. 
     SET nocount ON; 

     DECLARE @SPlitDAta TABLE 
     ( 
      colorcode NVARCHAR(150) 
     ) 

     INSERT INTO @SPlitDAta 
     SELECT @ColorCode 

     SELECT * 
     FROM color 
     WHERE code IN (SELECT split.a.value('.', 'VARCHAR(1000)') 
         FROM (SELECT Cast('<S>' + Replace(colorcode, ',', 
              '</S><S>') 
              + '</S>' AS XML) AS ColorCode 
           FROM @SPlitDAta) AS A 
          CROSS apply colorcode.nodes('/S') AS Split(a)) 
    END 
+0

Vous devriez vraiment utiliser la fonction ** paramètre de table ** à la place ..... –