Besoin d'aide pour une procedure

Signaler
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007
-
Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
-
Bonjour,
J'ai un petit soucis avec une procédure SQL...

- J'ai un champs dans une table[Sequence] qui s'appelle Argument. Ce champs (nvarchar) contient des id d'une autre table [Contact], séparés par des ';'.

Ex : 30.1; 12.1; 1.1

Je voudrais que ma requete puisse :

- Extraire tout les id de la table
- Pour chaque id, aller rechercher 2 champs différents (nom et prenom) dans la table [Contact]
- Et les afficher dans une autre Requete.

A la fin je voudrais quelque chose du style

idSequence__|____argument______|____tache____|___ordre

123--12            |       Jean Reber                |      nettoyer         |        1
                         |       Marcel Robert          |    
                         |      Yvonne Feurbs          |
                         |            ...                        |
                     en fonction de la "Substring"

123--12            |       Didier Cabris            |       balayer            |       2
123--12            |                ...                    |            ...               |       3
...

Je voyais quelque chose du Style

DECLARE arg nvarchar(255)
SET arg = SELECT Sequence.Argument WHERE Sequence.idSequence LIKE '123--12' 
SELECT FirstName, LastName FROM Contact WHERE idContact = SUBSTRING(???)

Mais déjà là, une erreur survient : 'nvarchar' is not a recognized CURSOR option.

Ensuite, je n'ai plus d'idée pour réussir une telle requete.

Merci d'avance pour votre aide, infos,... et bonne fin de journée

 ElpenS

2 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
37
Salut

Je pense que ce que tu recherche est la fonction split en SQL server

Voila un code

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648

CREATE FUNCTION dbo.Split
(
@RowData nvarchar(2000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Data nvarchar(100)
)
AS
BEGIN
Declare @Cnt int
Set @Cnt = 1

While (Charindex(@SplitOn,@RowData)>0)
Begin
Insert Into @RtnValue (data)
Select
Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))

Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
Set @Cnt = @Cnt + 1
End

Insert Into @RtnValue (data)
Select Data = ltrim(rtrim(@RowData))

Return
END

Cette focntion me semble simple

Pour l'utiliser
Il faut simplement
select * from dbo.split("1;2;3;5",";")

et le resultat est
1 | 1
2 | 2
3 | 3
4 | 5


Pour la suite de ton probleme je ne comprends pas trop
mais la fonction de split je pense te debloquera si je comprend le debut de ton raisonnement.


Voila
Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
3
Daccord avec le message précédent
pour l'erreur'nvarchar' is not a recognized CURSOR option.
Il faut un @ devant le nom des variable:
DECLARE @arg nvarchar(255)
SET @arg = ....