Dans SQL Server, cela insère 100 enregistrements de la table Customers dans tmpFerdeen: -
SELECT top(100)*
INTO tmpFerdeen
FROM Customers
Est-il possible de faire un SELECT INTO sur un UNION ALL SELECT: -
SELECT top(100)*
FROM Customers
UNION All
SELECT top(100)*
FROM CustomerEurope
UNION All
SELECT top(100)*
FROM CustomerAsia
UNION All
SELECT top(100)*
FROM CustomerAmericas
Vous ne savez pas trop où ajouter la clause INTO.
Cela fonctionne dans SQL Server:
SELECT * INTO tmpFerdeen FROM (
SELECT top 100 *
FROM Customers
UNION All
SELECT top 100 *
FROM CustomerEurope
UNION All
SELECT top 100 *
FROM CustomerAsia
UNION All
SELECT top 100 *
FROM CustomerAmericas
) as tmp
Vous n'avez pas du tout besoin d'une table dérivée pour cela.
Il suffit de mettre le INTO
après le premier SELECT
SELECT top(100)*
INTO tmpFerdeen
FROM Customers
UNION All
SELECT top(100)*
FROM CustomerEurope
UNION All
SELECT top(100)*
FROM CustomerAsia
UNION All
SELECT top(100)*
FROM CustomerAmericas
SELECT * INTO tmpFerdeen FROM
(SELECT top(100)*
FROM Customers
UNION All
SELECT top(100)*
FROM CustomerEurope
UNION All
SELECT top(100)*
FROM CustomerAsia
UNION All
SELECT top(100)*
FROM CustomerAmericas) AS Blablabal
Ce "Blablabal" est nécessaire
Je le ferais comme ça:
SELECT top(100)* into #tmpFerdeen
FROM Customers
Insert into #tmpFerdeen
SELECT top(100)*
FROM CustomerEurope
Insert into #tmpFerdeen
SELECT top(100)*
FROM CustomerAsia
Insert into #tmpFerdeen
SELECT top(100)*
FROM CustomerAmericas
Pour les requêtes MS Access, cela a fonctionné:
SELECT * INTO tmpFerdeen FROM(
SELECT top(100) *
FROM Customers
UNION All
SELECT top(100) *
FROM CustomerEurope
UNION All
SELECT top(100) *
FROM CustomerAsia
UNION All
SELECT top(100) *
FROM CustomerAmericas
)
Cela n'a pas fonctionné dans MS Access
SELECT top(100) *
INTO tmpFerdeen
FROM Customers
UNION All
SELECT top(100) *
FROM CustomerEurope
UNION All
SELECT top(100) *
FROM CustomerAsia
UNION All
SELECT top(100) *
FROM CustomerAmericas
Le défi que je vois avec la solution:
FROM(
SELECT top(100) *
FROM Customers
UNION
SELECT top(100) *
FROM CustomerEurope
UNION
SELECT top(100) *
FROM CustomerAsia
UNION
SELECT top(100) *
FROM CustomerAmericas
)
c’est que cela crée un jeu de données fenêtré qui résidera dans la RAM et que, sur des jeux de données plus volumineux, cette solution créera de graves problèmes de performances, car elle doit d’abord créer la partition, puis utiliser cette partition pour écrire sur le disque. table de temp.
Une meilleure solution serait la suivante:
SELECT top(100)* into #tmpFerdeen
FROM Customers
Insert into #tmpFerdeen
SELECT top(100)*
FROM CustomerEurope
Insert into #tmpFerdeen
SELECT top(100)*
FROM CustomerAsia
Insert into #tmpFerdeen
SELECT top(100)*
FROM CustomerAmericas
pour sélectionner insérer dans la table temporaire, puis ajoutez des lignes supplémentaires. Cependant, l’inconvénient est qu’il existe des lignes en double dans les données.
La meilleure solution serait la suivante:
Insert into #tmpFerdeen
SELECT top(100)*
FROM Customers
UNION
SELECT top(100)*
FROM CustomerEurope
UNION
SELECT top(100)*
FROM CustomerAsia
UNION
SELECT top(100)*
FROM CustomerAmericas
Cette méthode devrait fonctionner pour toutes les applications nécessitant des lignes distinctes. Si, toutefois, vous souhaitez que les lignes en double remplacent simplement UNION pour UNION ALL
Bonne chance!