2011-08-12 8 views
0

Je dispose d'un process stocké dans lequel je transmets deux paramètres. Un paramètre est un paramètre table-évalué et l'autre est un nvarchar. Voici la procédure stockée:Procédure stockée SQL - Utilisation des paramètres en interne

ALTER PROCEDURE [dbo].[_sp_TestProc]  
    @P1 As [dbo].[FileIdTableType] Readonly, 
    @P2 As NVARCHAR (MAX) 

AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT DISTINCT [Field1], [Field2], [Field3] 
     FROM [MyTable] WHERE [Field1] IN (@P1) 
     AND [Field2] IN (@P2) 

END 

De code, je passe alors dans mon DataTable comme @ P1 et une chaîne de valeurs @ P2 qui ressemble à "'Value1', 'Value2', 'Value3', 'Value4'"

Il est @ P2 qui me cause des problèmes . Le type de table fonctionne bien. Normalement, lorsque j'utilise des paramètres tels que ceux-ci dans mes process stockés, je crée une chaîne en interne, formate ma chaîne avec les paramètres, puis appelle sp_executeSql pour que la requête s'exécute. Toutefois, cela ne fonctionnera pas lors de l'utilisation des paramètres Table-Valued.

Est-ce que quelqu'un sait comment travailler avec des paramètres de table avec nvarchar comme ça? Je suis sûr qu'il me manque quelque chose de simple en essayant de le formater correctement. Merci,

-Scott

+0

Vous pouvez diviser la chaîne et l'insérer dans une variable de table/table temporaire. –

Répondre

1

Vous devez analyser @ P2 dans une table temporaire ou une table var premier. Vous ne pouvez pas utiliser l'opérateur IN avec une seule chaîne qui liste un certain nombre de valeurs.

Voir this SO question. L'utilisation du paramètre nvarchar pour la clause IN ne serait possible que si vous créiez une instruction sql dynamique, ce qui n'est généralement pas une bonne idée.

Questions connexes