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

MS SQL Server Discussion :

[SQL SERVER 2005][PRO STOCK] len(@monvarchar) incorrect


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 58
    Points : 62
    Points
    62
    Par défaut [SQL SERVER 2005][PRO STOCK] len(@monvarchar) incorrect
    Bonjour,

    Voilà je ne comprends pas j'ai un problème avec la procédure suivante :

    A partir du 5eme n-uplet retourné par le curseur, le len(@SQL) n'est plus supérieur à 0 et je n'ai donc plus de ' UNION '


    J'ai donc adapté mon code pour l'exemple et l'architecture ne peut pas etre changée (mais ce ne sont pas des magasins et des produits )

    Comment cela se fait-il qu'au bout de plusieurs boucles de mon curseur, la longeur de @SQl n'est plus correcte?

    Merci d'avance car là je sèche vraiment à piger...

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    CREATE PROCEDURE [dbo].[procedure_test](
    @id_magasin int = -1,
    @prefixe_table nvarchar(100) = null
    )
     AS
     
    DECLARE @SQL nvarchar(4000)
     
    IF @id_magasin = -1
    BEGIN
    	DECLARE C_MAGASIN CURSOR 
    	FOR    SELECT IDMAGASIN,nom,prefixe_table from vue_magasins_actifs
    	OPEN C_MAGASIN
     
    	DECLARE @IDMAGASIN INT
        DECLARE @nom nvarchar(100)
        DECLARE @prefixe_table nvarchar(50)
     
    	SET @SQL = ''
    	SET@IDMAGASIN = 0
    	SET @nom = ''
    	SET @prefixe_table = ''
     
     
    	FETCH C_MAGASIN INTO @IDMAGASIN,@nom,@prefixe_table
    	WHILE @@FETCH_STATUS = 0
    	BEGIN
     
    		IF len(@SQL) >0 
    		BEGIN
    			SET @SQL = @SQL + ' UNION '
    			PRINT ' UNION ' + ''
    		END
    		ELSE
    		BEGIN
    			PRINT ' SQL =  /'
    		END
     
    		SET @SQL = @SQL + '(Select * from ' + @prefixe_table + 'produits where en_promo= 1 )'
     
    		PRINT '(Select * from ' + @prefixe_table + 'produits where en_promo= 1 )'
     
    		FETCH C_MAGASIN INTO @IDMAGASIN,@nom,@prefixe_table
    	END
     
            CLOSE C_MAGASIN
            DEALLOCATE C_MAGASIN
     
    		exec sp_executesql @SQL
    	--print @SQL
    END
    ELSE
    BEGIN
    	SET @SQL ='Select * from ' + @prefixe_table1 + 'produits where en_promo= 1'
     
    	print 'Select * from ' + @prefixe_table1 + 'produits where en_promo= 1'
     
    		IF len(@SQL)>0 
    		BEGIN
    			exec sp_executesql @SQL
    		END
    END
    et le résultat retourné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    (Select * from mag1_produits where en_promo=1)
     UNION 
    (Select * from mag2_produits where en_promo=1)
     UNION 
    (Select * from mag3_produits where en_promo=1)
     UNION 
    (Select * from mag4_produits where en_promo=1)
     UNION 
    (Select * from mag5_produits where en_promo=1)
     
     
    (Select * from mag6_produits where en_promo=1)
     
    (Select * from mag7_produits where en_promo=1)

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 141
    Points : 176
    Points
    176
    Par défaut
    En lisant le code en diagonale, j'ai peut être trouvé quelque chose.

    Est-ce que @prefixe_table reçoit à un moment donné, la valeur NULL?

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 58
    Points : 62
    Points
    62
    Par défaut
    tu as raison un prefixe_table reçoit null

    (même si en théorie, aucun ne devrait la recevoir)

    Donc pour le corriger j'ai fait ceci :
    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
     
    ...
    FETCH C_MAGASIN INTO @IDMAGASIN,@nom,@prefixe_table
    	WHILE @@FETCH_STATUS = 0
    	BEGIN
    		-- ---------------------------------------
    		-- VERIFICATION QUE PREFIXE_TABLE EST NON NULL
    		IF len(isnull(@prefixe_table,''))>0
     		BEGIN
    		-- ---------------------------------------
    		IF len(@SQL) >0 
    		BEGIN
    			SET @SQL = @SQL + ' UNION '
    			PRINT ' UNION ' + ''
    		END
    		ELSE
    		BEGIN
    			PRINT ' SQL =  /'
    		END
     
    		SET @SQL = @SQL + '(Select * from ' + @prefixe_table + 'produits where en_promo= 1 )'
     
    		PRINT '(Select * from ' + @prefixe_table + 'produits where en_promo= 1 )'
     		-- ---------------------------------------
    		END
    		-- ---------------------------------------
    		FETCH C_MAGASIN INTO @IDMAGASIN,@nom,@prefixe_table
    	END
    ...
    Merci vraiment car je commençais à devenir...

    Merci beaucoup !!!

    Bonne journée

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 141
    Points : 176
    Points
    176
    Par défaut
    De rien

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

Discussions similaires

  1. SQL SERVER 2005 procédure stockée
    Par elrick richese dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/03/2009, 11h54
  2. [SQL-SERVER 2005]Procédure stockée avec table temporaire
    Par mathieu44800 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2007, 14h18
  3. [2.0] Lenteur d'une connection à une base de données SQL Server 2005 Pro
    Par Pilloutou dans le forum Accès aux données
    Réponses: 3
    Dernier message: 09/02/2007, 16h44
  4. [SQL Server 2005] Procédure stockée dynamique ?
    Par nitrous007 dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 20/12/2006, 13h54

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