IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Mon code retourne : The command(s) completed successfully.


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 74
    Par défaut Mon code retourne : The command(s) completed successfully.
    Bonjour à tous

    j'ai une procédure T-SQL dont le but est de récupérer le nombre de mois entre deux dates.
    Quand je l'exécute en passant comme paramètre 0,0 alors j'ai une valeur null. ce qui es normal. cependant quand je passe en paramètre des valeurs existantes dans la base alors j' ai comme message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The command(s) completed successfully.
    voici ma procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    CREATE PROC DBO.PS_SEL_VerifNVeauAncienConjoint
     
    @code Numeric(9,0), -- code adhérent
    @code1 Numeric(9,0) -- code conjoint
     
    AS
     
    DECLARE @Nbre  Numeric(9,0)
    IF NOT EXISTS (SELECT * FROM TB_Beneficiaire  WHERE (IdBen = @code1) ) --un nouveau conjoint
     
    BEGIN
    	IF  EXISTS(SELECT *  FROM   TB_Beneficiaire INNER JOIN   TB_SortirAssurance ON TB_Beneficiaire.IdBen = TB_SortirAssurance.IdBen WHERE   (TB_Beneficiaire.IdCatBen = 6) AND (TB_Beneficiaire.IdAdhBen = @code))
    	BEGIN
    		SET @Nbre  =(SELECT   TOP 1  (DATEDIFF(Month, TB_SortirAssurance.DatSortAss, GETDATE()))  
    		 FROM  TB_Beneficiaire INNER JOIN  TB_SortirAssurance ON TB_Beneficiaire.IdBen = TB_SortirAssurance.IdBen
    		WHERE     (TB_Beneficiaire.IdCatBen = 6) AND (TB_Beneficiaire.IdAdhBen = @code) ORDER BY TB_SortirAssurance.DatSortAss, TB_Beneficiaire.IdBen DESC)
    		SET @Nbre =null
    	END
     
    	ELSE
     
    	BEGIN
    		SET @Nbre =null
    	END
     
    	SELECT  @Nbre  AS Nbre 
     
    END
     
    GO
    exple d'exécution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute PS_SEL_VerifNVeauAncienConjoint 35,35
    je ne comprend rien. et ceci fait que mon code hôte en visual basic m'indique que mon recordset est fermer.

    quelqu'un peut il m'aider a mieux comprendre ce phénomène ?

    merci d'avance.

  2. #2
    Membre éclairé Avatar de SetaSensei
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF NOT EXISTS (SELECT * FROM TB_Beneficiaire  WHERE (IdBen = @code1) ) --un nouveau conjoint
    Votre code est exécuté si les valeurs ne sont pas dans la base.

    Si les valeurs le sont, la procédure ne fait rien et sort normalement sans toucher à @Nbre.

    D'ailleurs, relisez bien votre code, quoique vous fassiez, @Nbre sera toujours à null :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET @Nbre  =(SELECT   TOP 1  (DATEDIFF(Month, TB_SortirAssurance.DatSortAss, GETDATE()))  
    		 FROM  TB_Beneficiaire INNER JOIN  TB_SortirAssurance ON TB_Beneficiaire.IdBen = TB_SortirAssurance.IdBen
    		WHERE     (TB_Beneficiaire.IdCatBen = 6) AND (TB_Beneficiaire.IdAdhBen = @code) ORDER BY TB_SortirAssurance.DatSortAss, TB_Beneficiaire.IdBen DESC)
    		SET @Nbre =NULL

  3. #3
    Invité
    Invité(e)
    Par défaut
    si vous voulez passer un paramètre... mettez un paramètre de sortie dans votre procédure ou utilisez une fonction.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 74
    Par défaut
    merci à tous pour votre aide

    le bon code est celui ci. je crois qu'il marche comme je le souhaite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    CREATE PROC DBO.PS_SEL_VerifNVeauAncienConjoint
     
    @code Numeric(9,0), -- code adhérent
    @code1 Numeric(9,0) -- code conjoint
     
    AS
     
    DECLARE @Nbre  Numeric(9,0)
    IF NOT EXISTS (SELECT * FROM TB_Beneficiaire  WHERE (IdBen = @code1) ) --un nouveau conjoint
     
    BEGIN
    	IF  EXISTS(SELECT *  FROM   TB_Beneficiaire INNER JOIN   TB_SortirAssurance ON TB_Beneficiaire.IdBen = TB_SortirAssurance.IdBen WHERE   (TB_Beneficiaire.IdCatBen = 6) AND (TB_Beneficiaire.IdAdhBen = @code))
    	BEGIN
    		SET @Nbre  =(SELECT   TOP 1  (DATEDIFF(Month, TB_SortirAssurance.DatSortAss, GETDATE()))  
    		 FROM  TB_Beneficiaire INNER JOIN  TB_SortirAssurance ON TB_Beneficiaire.IdBen = TB_SortirAssurance.IdBen
    		WHERE     (TB_Beneficiaire.IdCatBen = 6) AND (TB_Beneficiaire.IdAdhBen = @code) ORDER BY TB_SortirAssurance.DatSortAss, TB_Beneficiaire.IdBen DESC)
     
     
    	END
     
    	ELSE
     
    	BEGIN
    		SET @Nbre =10
    	END
     
    	SELECT  @Nbre  AS Nbre 
     
    END
     
    ELSE
     
    BEGIN
    	SELECT 10 AS Nbre 
    END
    GO
    ben si vous trouvez des imperfections je suis la.

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Vous pouvez simplifier votre procédure stockée, en écrivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    CREATE PROC dbo.PS_SEL_VerifNVeauAncienConjoint
    	@code numeric(9,0), -- code adhérent
    	@code1 numeric(9,0) -- code conjoint
    AS
    BEGIN
    	DECLARE @Nbre  Numeric(9,0) = 10
     
    	IF NOT EXISTS --un nouveau conjoint 
    	(
    		SELECT	*
    		FROM	dbo.TB_Beneficiaire
    		WHERE	IdBen = @code1
    	) 
    	BEGIN
    		IF EXISTS
    		(
    			SELECT		*
    			FROM		dbo.TB_Beneficiaire AS B
    			INNER JOIN	dbo.TB_SortirAssurance AS SA ON B.IdBen = SA.IdBen
    			WHERE		B.IdCatBen = 6
    			AND		B.IdAdhBen = @code
    		)
    		BEGIN
    			SELECT		TOP 1 @Nbre = DATEDIFF(month, SA.DatSortAss, GETDATE())
    			FROM		dbo.TB_Beneficiaire AS B
    			INNER JOIN	dbo.TB_SortirAssurance AS SA ON B.IdBen = SA.IdBen
    			WHERE		B.IdCatBen = 6
    			AND		B.IdAdhBen = @code
    			ORDER BY	SA.DatSortAss, B.IdBen DESC
    		END
    	END
     
    	SELECT @Nbre AS Nbre
    END
    Mais vous pouvez aller encore plus loin en écrivant une fonction, ce qui vous permettra de trouver ce nombre dans une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    CREATE FUNCTION	FN_SEL_VerifNVeauAncienConjoint
    	(
    		@code numeric(9,0), -- code adhérent
    		@code1 numeric(9,0) -- code conjoint
    	)
    	RETURNS numeric (9,0)
    AS
    BEGIN
    	DECLARE @Nbre numeric(9,0)
    	SET @Nbre = 10
     
    	IF NOT EXISTS
    	(
    		SELECT	*
    		FROM	TB_Beneficiaire
    		WHERE	IdBen = @code1
    	) --un nouveau conjoint 
    	BEGIN
    		IF EXISTS
    		(
    			SELECT		*
    			FROM		TB_Beneficiaire
    			INNER JOIN	TB_SortirAssurance ON TB_Beneficiaire.IdBen = TB_SortirAssurance.IdBen
    			WHERE		TB_Beneficiaire.IdCatBen = 6
    			AND		TB_Beneficiaire.IdAdhBen = @code
    		)
    		BEGIN
    			SELECT		TOP 1 @Nbre = DATEDIFF(month, SA.DatSortAss, GETDATE())
    			FROM		TB_Beneficiaire AS B
    			INNER JOIN	TB_SortirAssurance AS SA ON B.IdBen = SA.IdBen
    			WHERE		B.IdCatBen = 6
    			AND		B.IdAdhBen = @code
    			ORDER BY	SA.DatSortAss, B.IdBen DESC		
    		END
    	END
     
    	RETURN @Nbre
    END
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT dbo.FN_SEL_VerifNVeauAncienConjoint(uneValeurDeCode, uneValeurDeCode1)
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT dbo.FN_SEL_VerifNVeauAncienConjoint(ColonneDeCode, ColonneDeCode1)
    mais aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE	dbo.uneTable
    SET	uneColonne = uneValeur
    	uneAutreColonne = dbo.FN_SEL_VerifNVeauAncienConjoint(ColonneDeCode, ColonneDeCode1)
    WHERE	...
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE	dbo.uneTable
    WHERE	dbo.FN_SEL_VerifNVeauAncienConjoint(ColonneDeCode, ColonneDeCode1) = uneCertaineValeur
    WHERE ...
    Vous noterez néanmoins quand ces cas d'utilisation, la fonction est appelée pour chaque ligne des lignes retournées ou affectées par la requête, ce qui rend leur utilisation contre-performante

    @++

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 74
    Par défaut
    merci à tous
    Good Day

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mon code n'est pas interprété !
    Par korriganez dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2006, 15h46
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. Réponses: 1
    Dernier message: 21/02/2005, 12h40
  4. [Kylix] Libc-The command don't start
    Par geminicryrulez dans le forum EDI
    Réponses: 1
    Dernier message: 12/06/2004, 10h15
  5. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo