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 :

Numéro de ligne


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Gaara-Manga
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Avril 2007
    Messages : 247
    Par défaut Numéro de ligne
    Bonjour,

    Je suis en train de faire un script d'exportation de données sous SQL Server 2000.

    Je l'ai quasiment finit mais je bloque juste sur un point.
    En effet je chercher à savoir comment faire pour récupérer un enregistrement avec un SELECT, selon son numéro d'enregistrement.

    En gros récupérer une ligne selon son indice.

    J'espère trouver une réponse à cette question qui me bloque depuis quelques jours maintenant.

    Merci beaucoup d'avance

  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
    Cela est STRICTEMENT impossible. Une base de données et les tables qui sont dedans répondent à la théorie des ensembles et il n'existe aucune notion d'ordre (ni ordre des lignes, ni ordres des colonnes, des tables...).

    Une table c'est comme un sac de bille. Demander de retirer la 32e bille du sac n'a aucun sens !

    Lisez les articles que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L5
    http://sqlpro.developpez.com/cours/sqlaz/fondements/#L3

    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 expérimenté Avatar de Gaara-Manga
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Avril 2007
    Messages : 247
    Par défaut
    Oki merci beaucoup SQLpro au moins sa enlève cette théorie de ma tête^^

    A ce moment la j'aurais une autre question, comment faire un parcours des données d'une table sachant qu'il y a une variable de table et de colone dans la requête.
    Au début je voulais faire avec les curseurs quelque chose un peu comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE CursTable CURSOR FOR 
    	SELECT @Colone
    	FROM @Table
     
    OPEN CursTable
    FETCH NEXT FROM CursTable
    INTO @DONNEE
     
    WHILE @@FETCH_STATUS = 0
    BEGIN
     
    END
    Le problème est que la seul commande que je connais qui prend en charge les variables de tables c'est la commande sp_executesql mais qui ne me permet pas de faire de parcours pour autant.

    Donc je reste coincé -_-

    Au début j'était partie avec le numéro de ligne en fesant une requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT '+ @Colone + ' FROM ' + @Table + ' WHERE '+@Colone_Primaire+' in (SELECT TOP 3 '+@Colone_Primaire+' FROM '+@Table+') and '+@Colone_Primaire+' not in (SELECT TOP 2 '+@Colone_Primaire+' FROM '+@Table+') '
    En m'appuyant sur la clé primaire. Mais comme toutes les tables n'en n'ont pas jme suis vite trouvé bloqué.

    Sinon merci beaucoup encore pour votre aide j'espère que quelqu'un connait une solution à ce problème.

    (si sa peut aider sinon, ce que je cherche à faire c'est un script qui créer des requêtes de type INSERT INTO pour exporter toutes les données d'une base. Script qui s'adapterais à n'importe quel base)

  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
    Vous pouvez piloter un curseur avec du SQL dynamique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECLARE @my_cur CURSOR
    EXEC sp_executesql
         N'SET @my_cur = CURSOR STATIC FOR 
           SELECT name FROM dbo.sysobjects; 
           OPEN @my_cur',
         N'@my_cur cursor OUTPUT', @my_cur OUTPUT
    FETCH NEXT FROM @my_cur
    mais il serait plus intéressant que vous nous disiez ce que vous voulez faire (au sens sémantique du terme ) autrement dit quel traitement de données....

    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/ * * * * *

  5. #5
    Membre expérimenté Avatar de Gaara-Manga
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Avril 2007
    Messages : 247
    Par défaut
    Sa fait plaisir de voir quelqu'un qui à l'air de s'y connaitre dans le domaine^^

    Alors le but de mon script c'est de générer une grosse requête d'INSERT INTO pour pouvoir exporter des données.
    (Je sais qu'il y a un module pour SQL Server nommée SQL Server Database Publishing Wizard mais mon patron préfère qu'on est la source)


    Donc ensuite voici comment moi j'ai procédé :
    Dans un premier temps je parcours chaque table à l'aide de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE CursTable CURSOR FOR 
    	SELECT so.name
    	FROM sysobjects so 
    	WHERE  so.xtype = 'U'
    	ORDER BY so.name
     
    OPEN CursTable
    FETCH NEXT FROM CursTable
    INTO @Table
     
    WHILE @@FETCH_STATUS = 0
    BEGIN

    Dans ce même parcours, j'avais fait le parcours des enregistrements par numéro de ligne mais l'idée jlai abandonné par rapport à ce que vous m'aviez dit^^
    Sinon c'était avec cette partie de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		SELECT I.rows
    		FROM sysobjects O join sysindexes I ON O.id=I.id
    		WHERE O.xtype='U' and O.name = @Table
    Je récupérais la clé primaire (la sa posé problème vu que toute les tables n'en avais pas forcément)
    En suite je faisais un parcours des colonnes avec la partie de code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			DECLARE CursColone CURSOR FOR
    				SELECT name
    				FROM syscolumns
    				WHERE  id IN (SELECT id FROM sysobjects WHERE name = @Table)
     
    				ORDER BY colorder
     
    			OPEN CursColone
    			FETCH NEXT FROM CursColone
    			INTO @Colone
    Puis j'exécutais une requête qui me permettais de récupérer les infos de la table sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @sql = N'SELECT @rv='+ @Colone + ' FROM ' + @Table + ' WHERE '+@Colone_Primaire+' in (SELECT TOP '+@j+' '+@Colone_Primaire+' FROM '+@Table+') and '+@Colone_Primaire+' not in (SELECT TOP '+@k+' '+@Colone_Primaire+' FROM '+@Table+') '
    EXEC sp_executesql @sql, N'@rv varchar(8000) out',@rv = @Info out

    Avec quelques autres traitements je m'étais en forme la requête pour ensuite l'afficher :

    Voila en gros ce que fesait mon script(qui marche bien pour les bases dans lesquelles il y a une clé primaire pour chaque table).
    Le résultat final doit être en gros qu'il doit afficher quelque chose du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO ConcertToMusique(Cm_code, Fk_concert, Fk_musique) VALUES('26', '3', '11')
     
    INSERT INTO Famille(Fa_code, Fa_libelle) VALUES('2', 'Corde')
    INSERT INTO Famille(Fa_code, Fa_libelle) VALUES('4', 'Vent')
    Avec toutes les valeurs de la base.

  6. #6
    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
    Évitez d'utiliser les tables systèmes. Utilisez de préférence les vues d'informations de SCHEMA telles que INFORMATION_SCHEMA.TABLES / COLUMNS.

    Mieux, utilisez les procédures qui ont été développez par la communauté :
    http://vyaskn.tripod.com :: sp_generate_inserts

    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. Rajouter les numéros de ligne dans une colone d'une requete
    Par AntiSAL dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 02/11/2005, 19h07
  2. Afficher le numéro de ligne dans une requete SELECT
    Par tilb dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/09/2004, 10h20
  3. Méthode donnant le numéro de ligne d'un Memo contenant un texte
    Par kilinette dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2004, 10h16
  4. [DomAST] Numéro de ligne d'un noeud
    Par Satch dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 30/03/2004, 10h15
  5. [JSP] Affichage numéro de ligne d'une exception
    Par PhoneKilleR dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 23/09/2003, 14h59

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