[SGBD] Procédure stockée, paramètre et clause IN

Procédure stockée, paramètre et clause IN [SGBD] - SQL/NoSQL - Programmation

Marsh Posté le 10-05-2005 à 14:33:48    

Salut.
 
J'ai un léger souci...
 
J'ai une PS, qui prend en paramètre "@invoicenb".
 
Actuellement, dans ma procédure, j'ai une clause :
 

Code :
  1. and invoicenb like '%' + @invoicenb + '%'


 
Je pense que j'ai pas besoin d'expliquer ce que ça fait.
 
Par contre, maintenant, ce champ peut contenir non pas un fragment de numéro de commande, mais d'une liste de numéros de commande, par exemple :
 
"123,589,477"
 
Comment faire passer ça en paramètre ?
 
Dans un premier temps, j'ai tenté :
 

Code :
  1. and (invoicenb in (@invoicenb) or @invoicenb = '')


 
Mais ça plante, évidement.
 
Deplus, les numéros en question, c'est des numéros alpha-numériques, genre : "CDE-XY5987", donc en plus, il faudrait pouvoir repasser ça en chaînes correctement.
 
Comment je pourrais faire ?
 
PS: à savoir que le nombre de commandes passées en paramètre n'est pas connu à l'avance.

Reply

Marsh Posté le 10-05-2005 à 14:33:48   

Reply

Marsh Posté le 10-05-2005 à 14:52:53    

Grrrr, bon, je me suis retrouvé obligé de faire une usine à gaz... M'enfin bon, ça marche !
 

Code :
  1. declare @invoicenb as varchar(8000)
  2. declare @pos as integer
  3. declare @oldpos as integer
  4. set @invoicenb = 'toto, titi , tata,tu tu,truc, essai'
  5. create table #tmpInvoiceNb (invoicenb varchar(50))
  6. set @oldpos = 0
  7. set @pos = charindex(',', @invoicenb, @oldpos + 1)
  8. while @pos > 0
  9. begin
  10. insert into #tmpInvoiceNb values (ltrim(rtrim(substring(@invoicenb, @oldpos + 1, (@pos - 1) - @oldpos))))
  11. set @oldpos = @pos
  12. set @pos = charindex(',', @invoicenb, @oldpos + 1)
  13. end
  14. select * from #tmpInvoiceNb
  15. drop table #tmpInvoiceNb


 
J'aurai plus qu'à faire un :

Code :
  1. and (exists (select null from #tmpInvoiceNb tt where tt.invoicenb = inv.invoicenb) or @invoicenb = '')


 
C pas bô :D


Message édité par Arjuna le 10-05-2005 à 15:03:00
Reply

Marsh Posté le 10-05-2005 à 14:52:55    

Je ne sais pas si ce que tu cherches à faire est possible.
 
En tout cas sous Sybase, je ne connais rien qui permette de parser une variable.

Reply

Marsh Posté le 10-05-2005 à 15:03:32    

Elmoricq a écrit :

Je ne sais pas si ce que tu cherches à faire est possible.


Tu me connais mal :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed