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

MS SQL Server Discussion :

[syntaxe]Creation table avec nom dynamique


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 117
    Par défaut [RESOLU][syntaxe]Creation table avec nom dynamique
    Bonjour,

    j'utilise sql serveur 2000 (depuis tres peu de temps ...), et j'aimerais creer des tables avec comme partie du nom la date du jour, mais je ne sais pas comment creer une table avec un nom variable.

    J'aimerais avoir egalement votre avis sur la facon dont je procede pour historiser des donnees dans ces tables:
    - Creation d'une table (avec nom dynamique comportant la date ... n'ai pas encore trouve comment faire pour le nom)
    - Requete sur la date dans une table distante : Le format de date est un string 'yy-mm-dd ' (avec deux espaces en fin) et j'ai egalement du mal a convertir ce champ en type date. Pour l'instant je decoupe la date mais je n'ai pas reussi a recreer a partir de cela une date ...
    - Ajout dans la table cree du resultat de la requete


    Merci.

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Je sais que tu veux créer une table chaque jour parce que tu as des difficultés pour importer des champs dates sous SQL serveur.
    En effet, dans les fichiers textes, les dates sont sous la forme aaMMjj et l'heure sous la forme hhmmss par contre la date SQL SERVEUR est combiné avec l'heure.

    Voici comment tu dois proceder pour importer les dates sous SQL SERVEUR :
    • 1-Créer une table temporaire sous sql serveur qui recevra les données de ton fichier texte
      2-Créer une table définitive contenant un champs date au format SQL Serveur
      3-Créer deux fonctions de convertion de date et d'heure
      4-Lancer une requête INSERT ....SELECT pour lequel la date et l'heure seront concatené dans un seul champs

    Voici un exemple de code pour les fonctions de convertion
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    Create Function CDATE (@Madate varchar(10))
    	RETURNS varchar(8)
    AS
    BEGIN
    	Declare @HH varchar(2),
    		@MM char(2),
    		@SS char(2)
    	--On enlève les ".0"
    	--SET @Madate=left(@Madate,len(@Madate)-2)
    	--Recuperation des secondes
            IF len(@Madate)>2
    		Begin
    			--secondes, et il reste les hh et mm
    			set @ss=Right(@Madate,2)
    			set @Madate=left(@Madate,len(@Madate)- 2)
     
    			IF len(@Madate)>2
    			--Minutes et il reste les secondes
    				begin
    					set @mm=Right(@Madate,2)
    					set @hh=left(@Madate,len(@Madate)- 2)
    				end
    			else
    				begin
    					set @mm=@Madate
    					set @hh='00'
    				end
    		End
            Else
    		Begin
    			set @ss=@Madate
    			set @mm='00'
    			set @hh='00'
    		End
    	if len(@hh)=1 SET @hh= '0' +  @hh
    	if len(@mm)=1 SET @mm= '0' +  @mm
    	if len(@ss)=1 SET @ss= '0' +  @ss
    	Return (@hh + '-' + @mm + '-' + @ss)
    END
     
    Create Function CTIME (@Madate varchar(10))
    	RETURNS varchar(8)
    AS
    BEGIN
    	Declare @HH varchar(2),
    		@MM char(2),
    		@SS char(2)
    	--On enlève les ".0"
    	--SET @Madate=left(@Madate,len(@Madate)-2)
    	--Recuperation des secondes
            IF len(@Madate)>2
    		Begin
    			--secondes, et il reste les hh et mm
    			set @ss=Right(@Madate,2)
    			set @Madate=left(@Madate,len(@Madate)- 2)
     
    			IF len(@Madate)>2
    			--Minutes et il reste les secondes
    				begin
    					set @mm=Right(@Madate,2)
    					set @hh=left(@Madate,len(@Madate)- 2)
    				end
    			else
    				begin
    					set @mm=@Madate
    					set @hh='00'
    				end
    		End
            Else
    		Begin
    			set @ss=@Madate
    			set @mm='00'
    			set @hh='00'
    		End
    	if len(@hh)=1 SET @hh= '0' +  @hh
    	if len(@mm)=1 SET @mm= '0' +  @mm
    	if len(@ss)=1 SET @ss= '0' +  @ss
    	Return (@hh + ':' + @mm + ':' + @ss)
    END
    Je les ai implémenté pour répondre à ces genres de situations.
    Pour plus d'informations me contacter.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 117
    Par défaut
    Merci pour la fonction Laurent, elle me servira surement en la modifiant. Je n'ai pas de fichiers texte, je prends mes donnes dans une table SQL sur un PC distant, mais le champ date est au format texte exacttement comme ca : 'aa-mm-dd ' ('03-07-28 '), les heures aussi sont en texte mais la conversion ne pose pas de pb (format 'hh:mm:ss'). ?Pour la date je voudrais donc un champ date format DATE SQL (avec ou sans l'heure, apres une simple addition suffit).
    Ca c'est mon premier soucis, et ta fonction va surement m'aider, je vais voir ca.

    Mon second soucis, c'est creer une table avec le nom qui change chaque jour, j'ai vu qu'on ne pouvait pas mettre de variable pour le nom a la creation de table, y a-t-il une autre solution ? Sinon je crois aue je vai9s faire autrement, ajouter les donnes dans la meme table, creer des fichiers (le but est la sauvegarde des donnees), et effacer les donnes en trop, pour ca ca devrait aller.

    Par contre j'aimerais avoir votre avios sur la maniere de proceder. J'ai deux pc en liaison assez lente (2Mbps, cause multiplexeur), je veux archiver les donnees du premier sur le second pour ensuite les mettre sur CD, pour l'instant je pensais faire un package DTS execute tous les jours sur le second poste et ramener les donnees, mais le jour ou ce PC tombe .... est-ce aue je pourrais configurer le premier pour au'il fasse le boulot si il n'a pas de reponse du premier par exemple, ou synchroniser des taches entre les deux pour que le jour ou le PC de sauvegarde revient on ait pas supprime des donnees non sauvegardees, etc .... Mon soucis est au niveau surete du procede ... ma premiere methode fonctionnera tres certainement, mais plus en cas de probleme, et c'est ces situations aue j'aimerais prevoir au maximum pour etre tranquille ensuite.

    Merci d'avance

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Vous pouvez proceder comme sur ce model
    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
     
    CREATE PROCEDURE spl_Create_Table  
    	@chrDate varchar(6)
    AS
     
    	Declare @SQLStatment varchar(8000) --Vous pouvez modifier vous même
     
    	SET NOCOUNT ON 
     
    	Set @SQLStatment='CREATE TABLE AGENTS' + @chrDate + ' (' + 
    		'AGE_ID int NOT NULL ,' +
    		'AGE_NOM] varchar (50) COLLATE French_CI_AS NULL ,' +
    		'AGE_PRENOM varchar (50) COLLATE French_CI_AS NULL ,' +
    		'CONSTRAINT PK_AGE PRIMARY KEY  CLUSTERED ' + 
    		'( ' +
    			'AGE_ID' + 
    		')  ON PRIMARY ' + 
    	') ON PRIMARY '
    	EXEC (@SQLStatment)
    	GO
    GO

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 117
    Par défaut
    Merci beaucoup, je vous refais signe si je rencontre un soucis a ce niveau.
    Bonne journee.

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Ok, j'attends ta suite.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Avril 2004
    Messages : 78
    Par défaut
    j'essaye d'utiliser ce code pour créer dynamiquement des tables sauf que moi je voudrais accoler le @UID à un nom de table, mais pour l'instant je n'en suis pas encore là vu que je n'arrive pas à faire fonctionner cette procédure:

    Citation Envoyé par WOLO Laurent
    Vous pouvez proceder comme sur ce model
    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
     
    CREATE PROCEDURE spl_Create_Table  
    	@chrDate varchar(6)
    AS
     
    	Declare @SQLStatment varchar(8000) --Vous pouvez modifier vous même
     
    	SET NOCOUNT ON 
     
    	Set @SQLStatment='CREATE TABLE AGENTS' + @chrDate + ' (' + 
    		'AGE_ID int NOT NULL ,' +
    		'AGE_NOM] varchar (50) COLLATE French_CI_AS NULL ,' +
    		'AGE_PRENOM varchar (50) COLLATE French_CI_AS NULL ,' +
    		'CONSTRAINT PK_AGE PRIMARY KEY  CLUSTERED ' + 
    		'( ' +
    			'AGE_ID' + 
    		')  ON PRIMARY ' + 
    	') ON PRIMARY '
    	EXEC (@SQLStatment)
    	GO
    GO
    quand je lance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exec spl_Create_Table 'Test'
    j'ai le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ligne 1: syntaxe incorrecte vers ']'.
    or il n'y a pas de ']' ni dans la fenêtre d'execution ni dans le code, je comprends pas pourquoi , HELP!!!!!!!!!!!!!! siouplé

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

Discussions similaires

  1. Création de table avec nom de colonne dynamique
    Par jibileg dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/12/2007, 22h13
  2. creation table avec lignes d'une autre table sous Sql Server
    Par pops4 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 25/05/2007, 13h59
  3. Récupérer checkbox avec nom dynamique
    Par dumser1 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/04/2007, 11h02
  4. [Conception] Creation site avec menu dynamique
    Par tugars dans le forum Webdesign & Ergonomie
    Réponses: 4
    Dernier message: 18/04/2007, 14h38
  5. checked d'un checkbox avec nom dynamique
    Par Sylvain245 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/11/2005, 11h28

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