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 :

Difficultés avec les commandes WHILE, UPDATE et IF appliquées à SQL Server


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    géomaticien
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : géomaticien
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut Difficultés avec les commandes WHILE, UPDATE et IF appliquées à SQL Server
    Bonjour,

    Je suis un nouvel utilisateur de SQL Server et je souhaite traiter des points d’arpentage afin de construite différentes figures géométriques.
    Ce qu’il me faut faire, c’est de pouvoir reconnaître et définir des sous-groupes de points dans une liste globale. Il y a trois types de sous-groupes, les points individuels, les courbes (qui sont des formes ouvertes), puis les polygones (soit des formes fermées).

    Un code d’enregistrements permet de reconnaître si une suite de points appartient à l’un ou l’autre de ces sous-groupes. Par exemple, « station » définie un point seul, puis toutes les séquences de figures débutent avec le code « debut », se poursuive avec « continuer » et se termine avec le code « fermer » s’il s’agit d’un polygone, ou avec le code « fin » s’il s’agit plutôt d’une courbe.

    Voici un exemple de table de points :


    Tbl_ListePoints

    ID NORD EST CODE FIGURE SEQUENCE GROUPE
    1 100.00 100.00 station null null null
    2 200.00 125.00 station null null null
    3 250.00 265.00 debut null null null
    4 255.00 268.00 continuer null null null
    5 240.00 250.00 continuer null null null
    6 238.00 244.00 fermer null null null
    7 375.00 360.00 debut null null null
    8 382.00 369.00 continuer null null null
    9 366.00 387.00 continuer null null null
    10 370.00 372.00 fin null null null


    Ma stratégie -- qui ne fonctionne pas ! – se décompose en trois étapes :

    1- D’abord, je mets à jour les codes afin d’uniformiser les balises de début et de fin de figures, indépendamment qu’il s’agisse de courbes ou de polygones. Cette partie du processus fonctionne bien :

    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
     
    ------------------------------------
    declare @figD nvarchar(1)		set @figD = 'D'
    declare @figC nvarchar(1)		set @figC = 'C'
    declare @figF nvarchar(1)		set @figF = 'F'
     
    update tbl_ListePoints
       set FIGURE =
          (case
             when CODE = 'debut'		then @figD
             when CODE = 'continuer'	then @figC
             when CODE = 'fermer'		then @figF
             when CODE = 'fin'		then @figF
            else NULL
          end)
    go
    ------------------------------------

    2- Ensuite, je souhaite créer une séquence numérique entre les balises qui fait le compte de 1 à (n) entre le début et la fin d’une figure :

    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
     
    ------------------------------------
    declare @i int
     
    while (select FIGURE from tbl_ListePoints
    	where FIGURE <> NULL) = 'F'
     
    begin
    	set @i = 1
     
    	begin
    	update tbl_ARPT_PNTS_temp
    		if (select FIGURE from tbl_ListePoints) = 'D'
    			set SEQUENCE = @i
    		end
    		if (select FIGURE from tbl_ListePoints) = 'C'
    			set @i = @i + 1
    			set SEQUENCE = @i
    		end
    		if (select FIGURE from tbl_ListePoints) = 'F'
    			break
    		end	
    	end
    end
    ------------------------------------

    Le code ci-dessus présente l’idée de base, mais il ne fonctionne pas.

    3- Enfin, je veux particulariser chaque groupe de figure avec un code unique qui permettra de les raccorder à des tables parentes.

    Pour cette partie, je n’ai pas d’idée précise, sinon qu’il faudrait intégrer un décompte sur les groupes, puis déterminer le type de groupe en fonction du code de fin de figure (« fin » ou « fermer »).

    Après les différentes manipulations, la table devrait maintenant se présenter comme suit :

    ID NORD EST CODE FIGURE SEQUENCE GROUPE
    1 100.00 100.00 station null null null
    2 200.00 125.00 station null null null
    3 250.00 265.00 debut D 1 polygone-1
    4 255.00 268.00 continuer C 2 polygone-1
    5 240.00 250.00 continuer C 3 polygone-1
    6 238.00 244.00 fermer F 4 polygone-1
    7 375.00 360.00 debut D 1 courbe-1
    8 382.00 369.00 continuer C 2 courbe-1
    9 366.00 387.00 continuer C 3 courbe-1
    10 370.00 372.00 fin F 4 courbe-1


    Toute aide concernant spécifiquement les formes des commandes While et Update en Transact-SQL sera bienvenue,

    Merci

    À noter: la table réelle comporte plus de 20 000 entrées et la définition des courbes ou des polygones peut varier d’un groupe de seulement 2 points à des groupes de plus d’une centaine de points.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Pourquoi ne pas utiliser directement le SIG intégré à SQL Server (types GEOMETRY et GEOGRAPHY) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE T (ID INT, GEO GEOMETRY, NATURE VARCHAR(32))
     
    INSERT INTO T VALUES 
    (1, 'POINT(100 100)', 'station'), 
    (2, 'POINT(200 125)', 'station'), 
    (3, 'POLYGON((250 265, 255 268, 240 250, 238 244, 250 265))', 'surface'), 
    (7, 'POLYGON((375 360, 382 369, 366 387, 370 372, 375 360))', 'surface')
    Résultat :
    Nom : SQL Server Spatial Query.jpg
Affichages : 192
Taille : 53,2 Ko

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre habitué
    Homme Profil pro
    géomaticien
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : géomaticien
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Par défaut
    Merci SQLPro pour l'intérêt porté,

    Mais ma difficulté n'est pas tout à fait de transformer les points en données de type "Geometry". Il s'agit plutôt pour moi de récupérer des groupes de points dans une liste de plusieurs milliers d'entrées, avec pour seuls marqueurs des codes s'inscrivant dans une suite de lignes et indiquant le début, puis la fin d'une figure.

    Il faut en fait que je puisse recréer un lien de type parent - enfant, où le parent représente la figure, puis l'enfant correspond à un groupe de points. Pour l'heure, je n'ai que des enfants avec aucun éléments distinctifs pour recréer une clef étrangère !

    Theorodicus

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Il n'existe aucun ordre des lignes par défaut dans une table.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/03/2014, 11h17
  2. Difficulté avec les Radio button
    Par toitonline dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 17/04/2007, 17h58
  3. Problème avec les commandes systèmes
    Par ouakammathieu dans le forum Administration système
    Réponses: 8
    Dernier message: 27/05/2006, 15h06
  4. [C#] Difficulté avec les catch
    Par Roach- dans le forum ASP.NET
    Réponses: 9
    Dernier message: 31/01/2006, 17h57

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