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 :

Select into #temp ou Create table #temp


Sujet :

Développement SQL Server

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut Select into #temp ou Create table #temp
    Bonjour,
    Quel est le critère de choix entre les deux syntaxes suivantes,
    select into ou create +insert into select.
    Je suis dans une procédure stockée.
    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
    declare 	@pIN_DatePivot Datetime  
    set @pIN_DatePivot='20090101'
    CREATE TABLE #ORDERS(
    	[Scenario_Id] [int] NOT NULL,
    	[FileCom_Id] [nvarchar](10) NOT NULL,
    	[CPE_Id] [nvarchar](10) NOT NULL,
    	[Order_Amount] [numeric](18, 5) NOT NULL
    );
     
     
    	Insert into #ORDERS
    	([Scenario_Id],
    	[FileCom_Id],
    	[CPE_Id],
    	[Order_Amount])
     
    	Select Scenario_id,
    		FileCom_id,
    		CPE_id,
    		Sum(order_amount) as order_amount
     
    	from ASF_PROJECT_ORDERS
    	where  full_day<@pIN_DatePivot
    	group by Scenario_id,FileCom_id,CPE_id;
     
     
    select * from #ORDERS;
     
    drop table #ORDERS;
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    declare 	@pIN_DatePivot Datetime  
    set @pIN_DatePivot='20090101'
    	Select Scenario_id,
    		FileCom_id,
    		CPE_id,
    		Sum(order_amount) as order_amount
    	into #ORDERS	
    	from ASF_PROJECT_ORDERS
    	where  full_day<@pIN_DatePivot
    	group by Scenario_id,FileCom_id,CPE_id;
     
    select * from #ORDERS;
     
    drop table #ORDERS;
    Dans le cas réel, après le remplissage de la table temporaire, je supprime les données dont full_day<@pIN_DatePivot et je réinsere les données de la table #ORDERS avec un full_day -1 mois;
    ASF_PROJECT_ORDERS est une table de faits qui a une volumétrie assez importantes et dont on ne veut garder que les 4 dernières années.

    Donc la question est "dans quel cas utiliser la syntaxe select into et dans quel cas utiliser create".

    Merci de votre aide.
    Soazig

  2. #2
    Membre expérimenté
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Par défaut
    bonjour,
    L'instruction create table vous permet de définir précisement la structure de la table, le type de données des colonnes, les contraintes d'intégrités, .... tandis que l'instruction SELECT INTO défini simplement une table pour "contenir" le résultat de l"'instruction select donc moins bien structuré que la 1ère. après c'est en fonction de l'usage fait de la table.
    Toutefois je ne peux que vous conseiller de limiter autant que possible l'usage de ces tables temporaires et de privilégier les tables CTE et les vues pour résoudre vos requêtes de manipulation de données

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Merci pour ta réponse, en ce qui concerne l'utilisation de vue et de CTE, je ne suis pas sure que cela me soit utile dans le cas actuel. Je 'sauvegarde' un état agrégé en utilisant des critères de dates précis. Ensuite je supprime le détail ayant les mêmes critères de filtres. et enfin je réinsère les données.
    La seule façon que je voie pour faire cela sans table temporaire, serait de .
    Créer les données aggrégées dans la table finale en indiquant dans une colonne "spécifiques" qu'elles sont aggrégées, puis de supprimer les données ayant le même critères mais pas ce flag.
    Dans l'état actuel des choses je ne vois pas de colonnes dans ma table pouvant servir de flag.
    Cordialement
    Soazig

Discussions similaires

  1. CREATE TABLE .... AS SELECT
    Par blids dans le forum SQL
    Réponses: 5
    Dernier message: 13/10/2016, 14h00
  2. INSERT et SELECT en même temps sur une table
    Par xavier81 dans le forum Développement
    Réponses: 2
    Dernier message: 01/02/2011, 12h03
  3. Optimisation : Select Into ou Create Table?
    Par Baquardie dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/07/2007, 15h12
  4. "Create table..." à partir d'un "select"
    Par TraPpeur dans le forum Access
    Réponses: 3
    Dernier message: 21/11/2005, 12h23
  5. Réponses: 4
    Dernier message: 28/09/2005, 18h00

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