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 :

[SQL SERVER 2008] Requête pour générer les scripts insert


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut [SQL SERVER 2008] Requête pour générer les scripts insert
    Bonjour @ tous,

    J'aimerais faire une requête qui permette de générer dans un fichier tous les scripts d'insert des tables de ma BDD (qui est au format mdf).
    Le top serait de pourvoir indiquer les tables à prendre ou pas.

    Je me suis documenté sur la fonction Backup, mais elle ne fait pas ça.
    http://msdn.microsoft.com/fr-fr/library/ms186865.aspx

    Pour info, j'ai bien vu la FAQ: http://sqlserver.developpez.com/faq/?page=BCK#BCK7
    C'est soit en procédure stoquée, soit il faut utiliser un prog externe.
    J'aimerais faire ça dans le code ou en requête.

    Merci d'avance.

    David.

  2. #2
    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 : 43
    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,

    J'aimerais faire une requête qui permette de générer dans un fichier tous les scripts d'insert des tables de ma BDD (qui est au format mdf).
    Désolé de pinailler mais vous confondez une base de données relationnelle SQL et un fichier, ce qui n'est absolument pas la même chose.

    Cela étant, si c'est pour un besoin qui n'est pas fréquent, vous pouvez probablement vous contenter de l'assistant de génération de scripts comme je l'ai indiqué dans ce billet.

    Si c'est pour un besoin plus régulier, vous pouvez probablement vous inspirer du billet de SQLPro à ce sujet.

    Afin si vous avez besoin de réaliser de la copie de données en temps quasi réel, vous pouvez envisager d'utiliser l'envoi de journaux de transaction ou la réplication.

    @++

  3. #3
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour elsuket,

    Merci pour votre réponse, mais c'est un besoin régulier, et je ne veux pas d'intervention extérieure à mon appli et pas non plus de procedure stoquée.
    J'ai fini par me faire une fonction en C#.
    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
        public static string getInsertsTable(string table, int idxChampNumAuto, bool faireDelete, ref int nb) { // Si idxChampNumAuto<=0, alors on prend tous les champs
            string ret = "";
            if (faireDelete)
                ret = "DELETE FROM " + table + ";" + Environment.NewLine;
            DataSet ds = GetDs("SELECT * FROM " + table, dsName); // Remplir le dataset
            // Préparer le masque de la requête avec le nom des colonnes
            string sep = "";
            string strTmp = "INSERT INTO " + table + " (";
            for (int i = 0; i<ds.Tables[0].Columns.Count; i++) {
                if (i+1 != idxChampNumAuto) {
                    strTmp += sep + "[" + ds.Tables[0].Columns[i].ColumnName + "]";
                    sep = ",";
                }
            }
            strTmp += ") VALUES ([VALEURS]);" + Environment.NewLine;
            // Aller chercher les valeurs de la table
            for (int i= 0; i < ds.Tables[0].Rows.Count; i++) {
                string strTmp2 = "";
                sep = "";
                for (int j = 0; j<ds.Tables[0].Columns.Count; j++) {
                    if (j+1 != idxChampNumAuto) {
                        object leType = ds.Tables[0].Rows[i][j].GetType();
                        if ((leType == typeof(System.String))) { // Texte: Encadrés de guillemets
                            strTmp2 += sep + "N'" + ds.Tables[0].Rows[i][j].ToString().Replace("'", "''").Replace("\r", "").Replace("\n", " ") + "'";
                        } else if ((leType == typeof(System.DateTime))) { // Date: Cast
                            //DateTime d = new DateTime();
                            strTmp2 += sep + "CONVERT(DATETIME, '" + ((DateTime)ds.Tables[0].Rows[i][j]).ToString("yyyy-MM-dd") + "', 102)";
                        } else if ((leType == typeof(System.Int32)) || (leType == typeof(System.Boolean))) { // Numérique: Pas encadrés de guillemets
                            strTmp2 += sep + "" + ds.Tables[0].Rows[i][j].ToString() + "";
                        } else if (leType == typeof(System.DBNull)) { // NULL
                            strTmp2 += sep + "NULL";
                        } else
                            strTmp2 += sep + "(" + leType + ")" + ds.Tables[0].Rows[i][j].ToString() + "";
                        sep = ",";
                    }
                }
                ret += strTmp.Replace("[VALEURS]", strTmp2);
            }
            nb += ds.Tables[0].Rows.Count;
            return ret + Environment.NewLine;
        }

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Est ce qu'il n'est pas plus simple de scripter la définition des tables et de d'utiliser bcp pour le chargement même dans votre appli ?

    ++

  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 : 43
    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
    je ne veux pas d'intervention extérieure à mon appli et pas non plus de procedure stoquée.
    Y'a-t-il une raison particulière pour ne pas vouloir de procédure stockée ?

    @++

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

Discussions similaires

  1. [SQL SERVER 2008] Requête sur plusieur Tables
    Par Phoquounet dans le forum Développement
    Réponses: 9
    Dernier message: 03/10/2011, 10h10
  2. Réponses: 22
    Dernier message: 30/06/2011, 15h48
  3. Réponses: 2
    Dernier message: 18/11/2010, 09h54
  4. Réponses: 9
    Dernier message: 20/10/2010, 11h42
  5. [SQL SERVER 2008] requête max sur table
    Par mad_martigan dans le forum Développement
    Réponses: 1
    Dernier message: 29/06/2010, 16h31

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