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 2k5]Outil pour générer les procédures stockées CRUD des tables de la BD


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2003
    Messages : 171
    Points : 97
    Points
    97
    Par défaut [SQL SERVER 2k5]Outil pour générer les procédures stockées CRUD des tables de la BD
    Bonjour

    Comme le titre l'indique je suis à la recherche d'un outil qui permet de générer des procédures stockées qui permettent de faire l'ajout l'update et la suppression des tables d'une base de données sql server.

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Cherche plutôt un développeur T-sql...
    C'est quoi ton besoin précis?
    Tu cherches à apprendre le sql ou c'est un besoin vraiment spécifique?

  3. #3
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Vous pouvez faire cela en écrivant une procédure stockée utilisant du code SQL dynamique.
    Vous devez pour cela récupérer le nom des colonnes et leur type en utilisant les vues système sys.tables, sys.columns et sys.types si vous êtes sous SQL Server 2005 ou ultérieur

    @++

  4. #4
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par tazamorte Voir le message
    Bonjour

    Comme le titre l'indique je suis à la recherche d'un outil qui permet de générer des procédures stockées qui permettent de faire l'ajout l'update et la suppression des tables d'une base de données sql server.

    Merci d'avance
    Elsuket

    A+
    Etienne ZINZINDOHOUE
    Billets-Articles

  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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Merci Zinzinetti mais la requête qui est dans ce billet ne génère qu'un partie de l'INSERT.
    Je viens d'écrire le code pour générer le script d'une procédure stockée d'INSERT :

    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
    DECLARE @table_name sysname = 'maTable'
        , @cr char(2) = CHAR(13) + CHAR(10)
        , @tab char(1) = CHAR(9)
        , @parameters varchar(max)
        , @parameters_and_types varchar(max)
        , @sql varchar(max) 
     
    SELECT @sql = CASE 
                WHEN @sql IS NULL THEN @tab + 'INSERT' + @tab + @table_name + @cr + @tab + '(' + @cr + @tab + @tab + C.name 
                ELSE @sql + @cr + @tab + @tab + ', ' + C.name 
            END
    FROM        sys.columns AS C
    INNER JOIN    sys.tables AS T ON C.object_id = T.object_id
    WHERE        T.name = @table_name
    AND        C.is_computed = 0 
    ORDER    BY    C.column_id
     
    SELECT        @parameters_and_types = CASE WHEN @parameters_and_types IS NULL THEN '' + @tab ELSE @parameters_and_types + @tab + ', ' END + '@_' + C.name + ' ' +
            TY.name + CASE 
                WHEN TY.name IN ('char', 'varchar') THEN '(' + CASE C.max_length WHEN -1 THEN 'max' ELSE CAST(C.max_length AS varchar(5)) END + ')'
                WHEN TY.name IN ('nchar', 'nvarchar') THEN '(' + CASE C.max_length WHEN -1 THEN 'max' ELSE CAST(C.max_length / 2 AS varchar(5)) END + ')'
                WHEN TY.name IN ('float', 'numeric', 'decimal', 'real') THEN '(' + CAST(C.precision AS varchar(3)) + ',' + CAST(C.scale AS varchar(3)) + ')'
                WHEN TY.name IN ('datetime2', 'datetimeoffset', 'time') THEN '(' + CAST(C.scale AS varchar(3)) + ')'
                ELSE ''
            END + 
            CASE
                WHEN C.is_nullable = 1 THEN ' = NULL'
                ELSE ''
            END + @cr
            , @parameters = CASE WHEN @parameters IS NULL THEN @cr + @tab + 'SELECT' + @tab ELSE @parameters + @cr + @tab + @tab + ', ' END + '@_' + C.name + ' '
    FROM        sys.tables AS T
    INNER JOIN    sys.columns AS C ON T.object_id = C.object_id
    INNER JOIN    sys.types AS TY ON TY.user_type_id = C.system_type_id
    WHERE        T.name = @table_name
     
    SET    @sql = @sql + @cr + @tab + ')' 
    SET    @sql = 'CREATE PROCEDURE ps_INSERT_' + @table_name + @cr + @parameters_and_types
            + 'AS' +@cr
            + 'BEGIN' + @cr
            + @tab + 'SET NOCOUNT ON' + @cr + @cr + @sql + @parameters
    SET    @sql = @sql + @cr + 'END'
    PRINT    @sql
    Il suffit de l'encapsuler dans une procédure stockée et de la marquer comme objet système, comme tu le suggères

    Les autres instructions de type CRUD vont suivre dans un billet.

    Enjoy !

    @++

  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
    21 768
    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 : 21 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    Ton code ne fonctionnera pas si la collation du serveur ou de la base est CS. En effet le véritable nom des tables/vues systèmes est toujours en minuscule (exemple sys.tables et non sys.TABLES).

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

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2003
    Messages : 171
    Points : 97
    Points
    97
    Par défaut
    Merci pour vos réponses
    "7gyY9w1ZY6ySRgPeaefZ" je prendrai ta réponse comme une très mauvaise blague.

    Effectivement j'avais pensé a la procédure stockée mais je n'avais pas de point de part ce que vous venez de m'offrir je vais donc regarder ca tranquillement.

  8. #8
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Héhé je sais SQLPro, mais ce n'est pas moi : c'est le formateur de code du site qui l'a mis en majuscules
    Y'a-t-il moyen de forcer la mise en minuscules ?

    @++

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 : 21 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    Erreur récurrente déjà maintes fois signalée. Poste dans les forums interne une demande !

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

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Entre guillemets ça à l'air de fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from sys."tables"

Discussions similaires

  1. [SQL SERVER 2008] Requête pour générer les scripts insert
    Par dacid dans le forum Développement
    Réponses: 4
    Dernier message: 02/09/2011, 01h05
  2. Meilleur outil pour tester mes procédures stockées
    Par mercure07 dans le forum Outils
    Réponses: 1
    Dernier message: 17/02/2009, 20h09
  3. sql server 2005 : ou sont cache les procedures stockes ?
    Par arioule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/12/2006, 15h52
  4. [SQL-SERVER] Définir la BD d'une procédure stockée
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/03/2006, 11h40
  5. [SQL Server]Recupération du résultat d'une procédure stockée
    Par navis84 dans le forum Bases de données
    Réponses: 8
    Dernier message: 04/04/2005, 20h53

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