Besoin d'aide pour une procedure

cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007 - 30 août 2006 à 16:08
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 - 1 sept. 2006 à 19:22
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

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
31 août 2006 à 22:45
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
0
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
1 sept. 2006 à 19:22
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 = ....
0
Rejoignez-nous