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 :

copie d une table dans une autre table


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 29
    Par défaut copie d une table dans une autre table
    bonjour a tous,j ai un serieux probleme en sql qui me casse la tete de puis longtemps. il est le suivant:
    je dois ecrire une procedure qui copie entierement les donnees et la syntaxe d une table dans une autre table. cette procedure doit prendre en entree les noms des 2 tables. voici mon code si ca peut vous aider

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    -- Verify that the stored procedure does not exist.
    IF OBJECT_ID ('usp_GetErrorInfo', 'P') IS NOT NULL
    DROP PROCEDURE usp_GetErrorInfo;
    GO
    -- Create procedure to retrieve error information.
    Create PROCEDURE usp_GetErrorInfo
    AS
    SELECT
    ERROR_NUMBER() AS ErrorNumber,
    ERROR_SEVERITY() AS ErrorSeverity,
    ERROR_STATE() as ErrorState,
    ERROR_PROCEDURE() as ErrorProcedure,
    ERROR_LINE() as ErrorLine,
    ERROR_MESSAGE() as ErrorMessage;
    GO
     
    CREATE PROCEDURE COPIE_table @source varchar(50), @destination varchar (50)
    as
     
    begin try
    if NOT EXISTS (Select * from sysobjects where name = @source and Xtype='U' )--Permet de savoir si une table 'source' existe dans notre base de données
    BEGIN
    print 'table source pas dispo'
    END
    else
    BEGIN
    if NOT EXISTS(Select * from sysobjects where name= @destination and Xtype='U' )
    BEGIN
     
    select * into @destination from @source
    print 'copie reussie'
    END
     
    else
    BEGIN
    if exists (select * from @destination)
    BEGIN
    delete from @destination
    select * into @destination from @source
    print 'copie reussie'
    END
    else
    BEGIN
     
    select * into @destination from @source
    print 'copie reussie'
    END
     
    END
    end try
    begin catch
    execute usp_GetErrorInfo
    end catch
     
    GO
    mais j ai les erreurs du genre

    Msg 102, Level 15, State 1, Procedure COPIE_table, Line 15
    Incorrect syntax near '@destination'.
    Msg 1087, Level 15, State 2, Procedure COPIE_table, Line 21
    Must declare the table variable "@destination".
    Msg 1087, Level 15, State 2, Procedure COPIE_table, Line 23
    Must declare the table variable "@destination".
    Msg 102, Level 15, State 1, Procedure COPIE_table, Line 24
    Incorrect syntax near '@destination'.
    Msg 156, Level 15, State 1, Procedure COPIE_table, Line 27
    Incorrect syntax near the keyword 'else'.
    Msg 102, Level 15, State 1, Procedure COPIE_table, Line 29
    Incorrect syntax near '@destination'.
    Msg 102, Level 15, State 1, Procedure COPIE_table, Line 35
    Incorrect syntax near 'begin'.
    s il vous plait aidez moi, je suis la dessus depuis tres longtemps

    merci de votre aide

  2. #2
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Hello,

    Il va vous falloir passer par du SQL dynamique pour realiser cela.
    Vous ne pouvez pas utiliser de nom de variable comme cela dans un ordre SQL.

    NB: Copie s'ecrit avec un C

    Bonne journee,
    Dje

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 29
    Par défaut
    bonjour ptit_dje

    c donc quoi du sql dynamique?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @strRequete varchar(4000)
    set @strRequete = 'INSERT INTO ' + @source + ' select * from ' + @destination
    execute(@strRequete)
    Par contre, comme c'est un select *, si tu as un identity column tu vas avoir une erreur.

    PS : Dans mon exemple la table destination doit exister

  5. #5
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Bonjour,

    C'est le fait de construire votre ordre SQL dans une variable declaree en VARCHAR.
    Et ensuite executer cette commande.

    Soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Declare @cmd varchar(max)
     
    set @cmd = 'select * into ' + @destination + ' from ' + @source
     
    exec sp_executesql @cmd

  6. #6
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 29
    Par défaut
    bonsoir ptit_Dje

    merci pour tes explications, mais ca ne fonctionne pas, quand il faut executer la procedure.

    execute nom_procedure destination,source

    j ai une erreur du genre "Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'."

  7. #7
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 29
    Par défaut
    merci c bon ca marche

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

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. [AC-2003] Lier les tables d'une Base1 dans une Base3 via une Base2
    Par ted the Ors dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/12/2009, 11h58
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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