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 :

Problème d'apostrophes et de variables date


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut Problème d'apostrophes et de variables date
    Bonjour à tous !
    Je me présente, Valentin, étudiant en BTS Services Informatiques aux Organisations, spécialité Développement et je suis actuellement en stage en entreprise.

    Un de mes projets consiste à développer une application en C# afin de générer des fichiers (PDF et TXT principalement).
    Cependant, le contenu de ses fichiers est le résultat de différentes requêtes que je créer et teste sur DATABASE .NET - SQL SERVER.

    Venons-on aux faits :
    • Premièrement, j'ai créé une procédure stockée qui vide une table et la remplie par la suite grâce à des requêtes, qui récupère entre autre des dates. Le problème avec ses dates est que lorsque j'effectue mon insert, les valeurs insérées sont les valeurs par défaut quand la valeur du champs est "incorrecte" (c-à-d '1900/01/01').
      Après multitude de tests, je me suis rendu compte que l'insert ne pouvait fonctionner que si les dates étaient mises entre apostrophes.
      Voilà 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
      CREATE PROCEDURE MIM_LoadDemarques AS
      BEGIN
      	DECLARE @leNumPromo INT
      	DECLARE @leCodeArt VARCHAR(20)
      	DECLARE @laSaison INT
      	DECLARE @laDateDeDebut VARCHAR(10)
      	DECLARE @laDateDeFin VARCHAR(10)
      	DECLARE @lePrix FLOAT
       
      	SET @leNumPromo = 0
       
      -- TRUNCATE TABLE Mim_Demarques
       
      	WHILE (@leNumPromo<=10)
      		BEGIN
      			SELECT @leCodeArt = substring(rtrim(codearticle),1,10), 
      				   @laSaison = saison,
      				   @laDateDeDebut = dbo.MIM_ExtraitDateDebutFR(@leCodeArt,@leNumPromo),
      				   @laDateDeFin = dbo.MIM_ExtraitDateFinFR(@leCodeArt,@leNumPromo),
      				   @lePrix = dbo.MIM_ExtraitPrixPromo(@leCodeArt,@leNumPromo)
      			FROM article
      			WHERE codearticle = '013888801001'
       
      			INSERT INTO MIM_Demarques (CodeProduit, Saison, DateDebut, DateFin, Prix)
      				   VALUES (@leCodeArt,@laSaison,@laDateDeDebut,@laDateDeFin,@lePrix)
       
      			SET @leNumPromo = (@leNumPromo + 1)
      		END
      END
      J'ai tout essayé afin d'essayer de pouvoir insérer le caractère ' avant et après les variables dates mais rien ne fonctionne.
      J'ai cherché sur google et sur d’innombrables forums mais personne n'a le même problème que moi (langage, logiciel).

      Ma question est donc de savoir si vous savez comment échapper une quote dans le code.

    • Mon autre problème est que lorsque j'exécute la procédure :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      EXECUTE dbo.MIM_LoadDemarques
      Une erreur apparaît :
      ErrorCode: -2146232060

      [.Net SqlClient Data Provider]
      Number: 245, Class: 16, State: 1, Line: 8
      ErrorMessage: Erreur de syntaxe lors de la conversion de la valeur varchar '*' vers une colonne de type de données int.
      Cependant, l'insert est quand même effectué, mais je n'ai pas de valeur dans les champs date et prix.
      La ligne 8 correspond à la déclaration d'une varaible FLOAT . Et nul part je traite le caractère '*'.
      Je pense que cette erreur est liée à mon premier problème, mais si vous avez une idée, je suis preneur !


    J'espère avoir été assez clair, mais si vous avez des questions, n'hésitez pas.

    Vous remerciant par avance,

    Valentin

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Pour gérer des dates, il y a :

    DATETIME (obsolète sur les versions recentes de SQL Server)
    DATE (absent des vieilles versions de SQL Server)
    DATETIME2 (absent des vieilles versions de SQL Server)

    VARCHAR ne sert pas à manipuler des dates, tout au plus à :
    - interpréter une saisie manuelle
    - effectuer un rendu pour l'utilisateur final

    Donc commence par modifier le type de tes paramètres.

    Ensuite, la valeur littérale d'une date en SQL est toujours sous forme d'une chaîne de caractères (littérale) : donc appostrophes.

    01/01/1900 => C'est 1 divisé par 1 divisé par 1900, pas le premier janvier 1900.

    Dans tous les cas, utilise CONVERT() avec le bon pattern pour convertir proprement la date littérale en type DATE, car '01/02/1900' c'est le premier février pour la France et l'Angleterre, mais le 2 janvier pour les Etats Unis. Donc très important de savoir ce qu'on converti.

    Si tu en as la possibilité, tu peux imposer le format ISO pour la date : '1900-01-01' (YYYY-MM-DD) pas de toute possible pour l'interprétation.
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Tu as oublié l'UTC date (présent depuis SQL Server 2008 il me semble) GETUTCDATE() qui gère en prime l'UTC.


    Lorsque tu saisies une date dans un champ date. Tu as 3 possibilités.
    - Soit la donnée est déjà une date formatée
    - soit tu dois la convertir depuis une chaine de caractère
    - soit ta chaine de caractère est écrite sous un format précis, à savoir 'AAAAMMJJ' ou 'AAAA-MM-JJ' Lorsqu'un INT de ce format est placé entre quote SQL Server va implicitement comprendre qu'il s'agit d'une date, et te permettra l'insertion, ou même un where sur un champ date.


    Je n'ai pas totalement compris le format de sortie de date de tes fonctions de conversion. Pourrais-tu m'en donner un exemple? Et donner le CREATE de ta table par la même occasion?

    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Salut' !

    Déjà, merci de vos réponses.

    @StringBuilder :

    Mes fonctions MIM_ExtraitDateDebutFR et MIM_ExtraitDateFinFR retourne du varchar car à l'intérieur je manipule les caractères afin de retourner un résultat spécifique (tout simplement jj/mm/aaaa, car le convert(datetime, variable) ne le propose pas).
    J'avais essayé convert() et cast(). Pour le convert(), j'avais essayé 103 et 111 comme troisième paramètre. En vain.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    convert(datetime, @laDateDeDebut,103)
    Aujourd'hui j'ai testé le 130/131, et 120. Ce dernier à fonctionné, mais toujours avec des valeurs en dur.

    @Lyche

    Comme je viens de le dire, mes deux fonctions retournent un varchar, car à l'intérieur de ses fonctions, je manipule des caractères issue de requêtes.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select dbo.MIM_ExtraitDateDebutFR('015142301002',1)
    Résultat : Nom : WINSTORE - Database .NET Free (Utilisation non commerciale) - SQL Server (sa@172.16.90.68WINSTOR.jpg
Affichages : 422
Taille : 3,9 Ko

    Et voici le CREATE de la table en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE [dbo].[Mim_Demarques] (
    	[CodeProduit] char NOT NULL, 
    	[Saison] int, 
    	[DateDebut] datetime, 
    	[DateFin] datetime, 
    	[Prix] float
    )
    GO
    CREATE NONCLUSTERED INDEX [Mim_Demarques_pk]
    	ON [dbo].[Mim_Demarques] ([CodeProduit])
    GO
    __________________________________________________________________________________

    Après différents testes, on a trouvé avec un collègue que le problème venait de ce que retourne mes fonctions.
    Quand j'utilise les fonctions et que je tape les paramètres en dur, elle retourne bien un résultat. Par contre, quand je met le nom des variables, la fonction retourne NULL.
    Le problème est donc à un endroit où on ne l'imaginait pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select dbo.MIM_ExtraitDateDebutFR('015142301002',1)
    Me retourne bien une date, sous mon format choisie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @laDateDeDebut = dbo.MIM_ExtraitDateDebutFR(@leCodeArtParam,@leNumPromo),
    @laDateDeDebut = NULL


    Cependant, @leCodeArtParam et @leNumPromo ne sont pas null, ils ont bien les bonnes valeurs..

    Je ne comprend vraiment pas..

  5. #5
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Je viens de réaliser une chose dans ta procédure.

    Voici ton code d'origine :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT @leCodeArt     = substring(rtrim(codearticle),1,10), 
           @laSaison      = saison,
           @laDateDeDebut = dbo.MIM_ExtraitDateDebutFR(@leCodeArt,@leNumPromo),
           @laDateDeFin   = dbo.MIM_ExtraitDateFinFR(@leCodeArt,@leNumPromo),
           @lePrix        = dbo.MIM_ExtraitPrixPromo(@leCodeArt,@leNumPromo)
    FROM article
    WHERE codearticle = '013888801001'

    Dans ta requête tu renseigne le @leCodeArt. ET tu l'exploite dans cette même requête dans tes appels de fonctions. Le problème, c'est qu'il n'est pas encore renseigné! Du coup, c'est comme si tu passais un paramètre qui égale à 0 pour ton premier passage, et pour les autres, passages, il contiendra l'information fournie lors du précédent passage.

    Donc, pour éviter ce problème, il te faudrait ré-utiliser ton substring.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT @leCodeArt     = substring(rtrim(codearticle),1,10), 
           @laSaison      = saison,
           @laDateDeDebut = dbo.MIM_ExtraitDateDebutFR( substring(rtrim(codearticle),1,10),@leNumPromo),
           @laDateDeFin   = dbo.MIM_ExtraitDateFinFR(   substring(rtrim(codearticle),1,10),@leNumPromo),
           @lePrix        = dbo.MIM_ExtraitPrixPromo(   substring(rtrim(codearticle),1,10),@leNumPromo)
    FROM article
    WHERE codearticle = '013888801001'

    Teste avec ça, tu devrais avoir une date qui remonte. Ensuite, on pourra penser à regarder la suite (si problème persistant)

    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Re'


    Alors là, tu as illuminé ma vie !
    C'était donc bien ça le problème, le fait que le @leCodeArt n'avait pas encore de valeur. Du coup on donne un paramètre NULL donc forcément ça retourne un résultat NULL.

    Je ne savais pas, avant que tu le dises, que le paramètre n'était pas encore 'instancié'. Mais ça parait complètement logique.

    Je me coucherai vraiment moins bête ce soir
    __________________________________________________________________________________________________________________________________

    En ce qui concerne les dates, il n'y a même pas besoin d'utiliser un convert() au final, car peut importe dans quel format et type sont @laDateDeDebut et @laDateDeFin, lors de l'insert, elles vont être transformées en 'AAAA/MM/JJ'.
    __________________________________________________________________________________________________________________________________

    La procédure fonctionne donc correctement pour un article, mais quand j'enlève la clause where, il me met :
    ErrorCode: -2146232060

    [.Net SqlClient Data Provider]
    Number: -2, Class: 11, State: 0, Line: 0
    ErrorMessage: Expiration du Timeout. Le délai d'attente s'est écoulé avant la fin de l'opération ou le serveur ne répond pas.
    InnerException: Dépassement du délai d’attente
    La procédure met + d'une minute à s'exécuter donc le logiciel l'arrête.
    Le problème c'est que je ne vois pas comment optimiser l'exécution.
    J'ai essayé avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE codearticle = codearticle
    Mais c'est toujours aussi long..

  7. #7
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Alors, il faut savoir qu'il est impossible de faire des affectations de valeurs à des variables à partir d'une requête retournant plusieurs lignes.

    Si tu souhaites faire ton test sur un bloc et les envoyer dans ta table. Tu dois impérativement te passer de la boucle.
    D'ailleurs, je te le recommande, les SGBDR sont optimisés pour traiter les informations de manière ensembliste, c'est à dire par bloc de données.

    Peux-tu me dire à quoi correspond le @leNumPromo

    Tu fais une boucle qui va répéter 10 fois la requête. Est-ce pour des tests?

    Si tu souhaites faire toute ta table d'un coup, oublie les valeurs @ et passe directement par un INSERT SELECT.

    Code sql : 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
     
     
    WITH CodeArtNumPromo AS (
    SELECT DISTINCT
           CodeArticle
         , saison
         , ROW_NUMBER() OVER ( ORDER BY CodeArticle ) AS NumPromo
      FROM Article )
     
    INSERT INTO MIM_Demarques
         ( CodeProduit, Saison, DateDebut, DateFin, Prix )
    SELECT CodeArticle
         , saison
         , dbo.MIM_ExtraitDateDebutFR( CodeArticle, NumPromo )
         , dbo.MIM_ExtraitDateDebutFR( CodeArticle, NumPromo )
         , dbo.MIM_ExtraitDateDebutFR( CodeArticle, NumPromo )
       FROM CodeArtNumPromo;

    Afin que tu comprennes, voici l'explication de la requête.

    Dans la fonction WITH (Appelé CTE), je génère pour chaque CodeArticle, un NumPromo "auto-increment" trié par ordre alphabétique (ceci est arbitraire tu peux le changer, en changeant le ORDER BY de la fonction OVER().

    Une fois que la CTE à généré pour chaque code article un NumPromo associé, je me sers du résultat dans une requête qui va exécuter, pour chaque ligne, les fonctions de dates.

    Le tout est inséré dans la table MIM_Demarques.

    J'espère que ça t'aura aidé.

    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Le @NumPromo correspond au Numéro de Promotion : un article peut être soldé. Et il peut l'être 10 fois maximum.

    La première fois qu'il est soldé, il est entré dans une table SOLDE qui a ce format :
    Nom : WINSTORE - Database .NET Free (Utilisation non commerciale) - SQL Server (sa@172.16.90.68WINSTOR.jpg
Affichages : 422
Taille : 62,2 Ko
    Et est inséré jusqu'à PrixSolde1.
    À chaque nouvelle promotion, on insert dans la colonne suivante.

    * La première colonne correspond au CodeArticle.
    * Le première ligne correspond au prix.
    * La deuxième ligne (CodeArticle+P) correspond à dateDeDebutPromo(jjmmaa)+','+dateDeFinPromo(jjmmaa)+'3'.


    Dans mes fonctions qui retourne une date (et le prix), je recherche la colonne PrixSolde+@NumPromo.
    ___________________________________________________________________________________________________________

    Je vais essayer ce que tu m'as montré et expliqué puis je te répondrais.
    Dans le pire des cas, tu auras une réponse Lundi !


    [EDIT]
    Pour l'instant, c'était comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SET @leNumPromo = 1
    WHILE (@leNumPromo<=1)
    Pour faire les tests, avec seulement la première colonne de SOLDE.
    [/EDIT]



    Cordialement.

  9. #9
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    heu...

    c'est ta table qui est modélisée comme ça? ou c'est le résultat d'une requête?

    Parce que là, ton modèle n'est pas optimisé et va te compliquer la vie pour les traitements !!

    Edit : Le problème, c'est que la requête ne fonctionnera probablement pas en l'état. il te faudra l'adapter
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    C'est la table qui est modélisée comme ça.
    Je ne sais pas comment elle est remplie par contre.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Au moment de l'exécution de ton code, j'ai deux erreurs :

    ErrorCode: -2146232060

    [.Net SqlClient Data Provider]
    Number: 156, Class: 15, State: 1, Line: 1
    ErrorMessage: Syntaxe incorrecte vers le mot clé 'WITH'.
    [.Net SqlClient Data Provider]
    Number: 195, Class: 15, State: 10, Line: 3
    ErrorMessage: 'ROW_NUMBER' n'est pas un nom de fonction reconnu.
    Cependant, les deux noms sont en bleu ..


    (Ce logiciel est vraiment pourrit )


    Sinon, je me suis dit que en gros, ce que tu me propose, c'est de faire un curseur ? (Avec un loop par exemple)

  12. #12
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    hmmm tu as quelle version de SQL Server?

    ROW_NUMBER() n'est accessible que depuis la version 2008 il me semble.
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    SQL SERVER 08.00.07 (SP3)

    Je rappelle que je suis sur DATABASE .NET, et c'est une version free.

  14. #14
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Je suis pas du tout un adepte des curseurs et autres boucles, mais j'avoue ne pas voir comment résoudre ton problème autrement
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  15. #15
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Citation Envoyé par Lyche Voir le message
    ROW_NUMBER() n'est accessible que depuis la version 2008 il me semble.
    J'aurais dit 2005

    Citation Envoyé par valentin_emn Voir le message
    SQL SERVER 08.00.07 (SP3)
    Pas de chance !

    Citation Envoyé par Lyche Voir le message
    Je suis pas du tout un adepte des curseurs et autres boucles, mais j'avoue ne pas voir comment résoudre ton problème autrement
    Avec une table contenant des nombres de 0 à 10 (ou plus) - disons une table Nombre(N INT) - la procédure initiale peut se résumer à quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    INSERT INTO MIM_Demarques (CodeProduit, Saison, DateDebut, DateFin, Prix)
    	SELECT 
    			substring(rtrim(codearticle),1,10)
    		,	saison
    		,	dbo.MIM_ExtraitDateDebutFR(SUBSTRING(RTRIM(codearticle),1,10),N)
    		,	dbo.MIM_ExtraitDateFinFR(SUBSTRING(RTRIM(codearticle),1,10),N)
    		,	dbo.MIM_ExtraitPrixPromo(SUBSTRING(RTRIM(codearticle),1,10),N)
    	FROM article
    	CROSS JOIN Nombre
    	WHERE codearticle = '013888801001'
    		AND N <= 10

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Je n'ai pas totalement compris ton code aieeeuuuuu

  17. #17
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Il s'agit juste d'un produit cartésien entre la ligne voulue dans la table article et une table d'une seule colonne (N) et dix lignes, avec les chiffres de 1 à 10.

    La colonne N remplace alors votre variable @leNumPromo pour l'appel des fonctions

    et il n'y a plus besoin de boucle : tout est fait en une seule requête.

  18. #18
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Il faudrait pivoter alors, parce que sa table est sur 10 colonnes. Et non sur 10 lignes.
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  19. #19
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Le PIVOT, c'est de la mise en forme
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  20. #20
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Ok, et donc tu mets à jour 10 colonnes comme dans son modèle comment sans faire un pivot et sans faire de curseur?

    Je veux bien moi. Mais son modèle l'impose... on fait fi et on lui fait changer ?
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

Discussions similaires

  1. Problème sur variable date [BO 5.1.9]
    Par LOPEZ dans le forum Deski
    Réponses: 6
    Dernier message: 06/06/2014, 08h23
  2. Réponses: 7
    Dernier message: 24/10/2011, 21h49
  3. problèmes variable Date
    Par stargates dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/05/2008, 17h57
  4. PRoblème d'apostrophe dans variable.
    Par jbidou88 dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/06/2007, 14h57
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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