SQLShack (Nederlands)
Dit artikel behandelt de SQL SELECT INTO instructie inclusief syntaxis, parameters en gebruik met meerdere tabellen, bestandsgroepen en een WHERE-voorwaarde
We voegen regelmatig gegevens in SQL Server-tabellen in, hetzij vanuit een applicatie, hetzij rechtstreeks in SSMS. We kunnen gegevens invoegen met de instructie INSERT INTO. Om dit te doen, moeten we al een tabel hebben om er gegevens in in te voegen, aangezien we geen tabel kunnen maken met Invoegen in de instructie.
We moeten de volgende taken uitvoeren met de instructie INSERT INTO.
- Maak een tabelstructuur met de juiste gegevenstypen
- Voeg er gegevens in
Maar het goede nieuws is dat we beide taken kunnen uitvoeren elegant samen, met behulp van de SQL SELECT INTO-instructie. Het creëert een tabelstructuur voor de kolommen die worden geretourneerd door de Select-instructie.
Stel dat we veel records in een tabel willen bijwerken. We kunnen de SELECT INTO-instructie gebruiken om een back-uptabel te maken met de bestaande structuur vanaf de brontabel. Laten we de SELECT INTO in dit artikel onderzoeken.
SELECT INTO statement syntax
1
2
3
4
|
SELECTEER kolom1, kolom2 .. .ColumnN
NAAR nieuwe_tafel
VAN tabellen
;
|
Parameters in de SELECT INTO-instructie
- Kolommenlijst: we moeten de kolom specificeren die we willen ophalen en invoegen in een nieuwe tabel.
- Nieuwe_tabel: we kunnen hier de nieuwe tabelnaam specificeren. SQL Server maakt een nieuwe tabel met kolommen die worden genoemd in de kolommenlijst. We kunnen hiermee geen bestaande tafel vervangen. Tabelnaam moet uniek zijn.
- Tabellen: het bevat een tabel waaruit we records willen ophalen. We kunnen hier ook meerdere tabellen definiëren met de juiste Join-clausule.
- WHERE-voorwaarden: we kunnen records filteren met behulp van de Where-clausule. Het is een optionele clausule.
Laten we de SQL SELECT INTO-instructie verkennen met behulp van voorbeelden.
Omgeving:
In dit voorbeeld gebruiken we voorbeelddatabase AdventureWorks2017. Stel dat we records uit de tabel willen selecteren en een nieuwe tabel willen maken met behulp van de SELECT INTO-instructie. We willen geselecteerde kolommen alleen in de nieuwe tabel. Laten we een select-instructie uitvoeren op de Employee-tabel met de kolommen die we willen hebben.
Voordat we de SQL uitvoeren SELECT INTO verklaring, kunnen we verifiëren dat de Employee_Demo-tabel niet bestaat in de AdventureWorks2017-database met behulp van de opdracht sp_help.
1
|
sp_help “..”
|
In de volgende schermafbeelding kunnen we zien dat de tabel Employee_Demo niet bestaat in mijn database.
Voer de volgende query uit om een nieuwe tabel te maken met de instructie SELECT INTO.
We krijgen het volgende uitvoerbericht in Azure Data Studio. U kunt opmerken dat het aantal betrokken rijen 10 is. In de query hebben we de top 10 records geselecteerd uit een werknemerstabel.
We hebben toegang tot de gegevens van de nieuw gemaakte tabel Employee_Demo en controleren of deze dezelfde records bevat als onze eerdere select-instructie.
We hebben geen kolomeigenschappen gespecificeerd in de SQL SELECT INTO-instructie. Laten we de kolommen van de bron- en bestemmingstabel en hun eigenschappen vergelijken.
We kunnen de opdracht sp_help ‘tablename’ uitvoeren op zowel de tabel Werknemer als Werknemer_Demo. Ik heb de uitvoer van beide tabellen in Excel gekopieerd (voor geselecteerde kolommen). In de volgende schermafbeelding kunt u zien dat datatype van de kolom en hun eigenschappen vergelijkbaar zijn.
In de vorige SQL SELECT INTO-instructie , hebben we een bestemmingstabel (Employee_Demo) voorbereid op basis van een paar kolommen in de brontabel (Employee).
Laten we een andere tabel maken met alle kolommen in een Employee-tabel met de volgende query.
In de uitvoer kunnen we zien dat het 290 rijen heeft ingevoegd in de tabel Employee_All.
We hebben geverifieerd dat de SELECT INTO instructie maakt een nieuwe tabel aan met kolommen die zijn gespecificeerd in de kolomlijst. Het creëert ook een vergelijkbaar gegevenstype in de doeltabel.
Stel dat we primaire en externe sleutels in de brontabel hebben. Creëert het een primaire sleutel en een externe sleutel, vergelijkbaar met de brontabel? Nee, de SQL SELECT INTO-instructie maakt geen sleutels in de doeltabel. Als we willen, kunnen we sleutels op de bestemmingstabel definiëren. Laten we dit verifiëren in de volgende sectie.
In mijn eerdere voorbeeld bevat de Werknemer-tabel een primaire en externe sleutel die erop is gedefinieerd. We kunnen een lijst met bestaande sleutels krijgen met behulp van de INFORMATION_SCHEMA-weergave. Voer de volgende code uit en het retourneert bestaande primaire en externe sleutels in de tabel Werknemer.
We kunnen zien dat de tabel Werknemers primaire en externe sleutels bevat.
We hebben alle kolommen in Employee_All uit de tabel Employee gekopieerd. We moeten nu de primaire en externe sleutel op de bestemmingstabel controleren.
We kunnen zien dat deze geen enkele sleutel bevat in de bestemmingstabel. Het geeft ons flexibiliteit om sleutels op de bestemmingstabel te definiëren.
SQL SELECTEER IN – Voeg gegevens uit meerdere tabellen toe
In eerdere voorbeelden hebben we een tabel gemaakt met behulp van de SELECT INTO-instructie van een enkele tabel Medewerker. We kunnen ook meerdere tabellen samenvoegen en de SELECT INTO-instructie gebruiken om ook een nieuwe tabel met gegevens te maken. In deze sectie willen we meerdere tafels samenvoegen. In de volgende zoekopdracht hebben we de volgende tabellen samengevoegd in AdventureWorks2017.
Voer de volgende zoekopdracht uit. Het geeft resultaten van meerdere tabellen op basis van de join-voorwaarde en vermelde kolommen.
Voer een query uit en we volgen de uitvoer van de SQL SELECT INTO-instructie.
We willen een tabel maken met gegevens die worden geretourneerd met behulp van de bovenstaande tabel. Laten we de SQL SELECT INTO-instructie uitvoeren.
Het creëert. tabel en voeg er gegevens in. We kunnen records in deze tabel verifiëren met de instructie select.
We kunnen zien dat je meerdere tabellen kunt samenvoegen en output creëert tabel met behulp van de SELECT INTO-instructie.
We hoeven niet te zorgen voor het definiëren van gegevenstypen voor de bestemmingstabel. Als we handmatig een tabel willen maken, moeten we naar het datatype van elke kolom kijken en het datatype dienovereenkomstig definiëren. Als de gegevenstypen niet overeenkomen, kunt u de volgende foutmelding krijgen.
Fout 1: vanwege een niet-overeenkomende gegevenstypen
Msg 245, niveau 16, staat 1 , Regel 1
Conversie mislukt bij het converteren van de varchar-waarde GG naar het gegevenstype int.
Fout 2: Msg 8152, niveau 16, staat 30, regel 2
String of binaire gegevens worden afgekapt.
We krijgen deze fouten niet tijdens het invoegen van gegevens met behulp van de SQL SELECT INTO-instructie. We kunnen echter geen gegevens in bestaande tabellen invoegen met deze methode.
SELECTEER IN – Specificeer bestandsgroep
In eerdere secties hebben we onderzocht dat we een nieuwe tabel kunnen maken en er gegevens in kunnen invoegen met behulp van de SQL SELECT INTO-instructie uit bestaande tabellen. Het maakt alleen een tabel in de standaard bestandsgroep. We kunnen geen bepaalde bestandsgroep specificeren tot SQL Server 2016. In SQL Server 2017 kunnen we een bepaalde bestandsgroep specificeren waarin een nieuwe tabel moet worden gemaakt. SQL Server maakt een nieuwe tabel in die specifieke Verify-tabel Bestandsgroep. Als we geen bestandsgroepen specificeren in SQL Server 2017 en hoger, wordt een tabel gemaakt in de standaard bestandsgroep.
Opmerking: we kunnen geen bestandsgroepen specificeren in de SQL SELECT INTO voor SQL Server 2016 en eerder.
Laten we een nieuwe bestandsgroep toevoegen aan de AdventureWorks2017-database. Klik met de rechtermuisknop op de database en ga naar Filegroups.
Klik op deze filegroup-pagina op Add FileGroup en geef een naam op voor Filegroup.
Klik nu op Files en het toont de bestaande databasebestanden (data en logfile). Voeg op deze pagina een nieuw databestand toe en specificeer FileGroup uit de vervolgkeuzelijst. Het zou FileGroup moeten zijn die we zojuist hebben gemaakt.
We willen een SQL-tabel maken in INSERTFILE Filegroup. We hebben deze bestandsgroep niet als standaard bestandsgroep ingesteld.
In de volgende vraag kun je zien dat we de bestandsgroepnaam hebben gespecificeerd met de ON-clausule. Het werkt vergelijkbaar met een gewone SQL SELECT INTO-instructie met een verschil in een bestandsgroep.
1
2
3
|
selecteer * in person.person_temp
OP INSERTFILE –FILEGROUP NAAM
van person.person
|
Zodra de tabel is aangemaakt, voer je een sp_help commando uit op deze nieuw aangemaakte tabel. In de volgende schermafbeelding kunnen we controleren of de tabel zich in INSERTFILE FileGroup bevindt. Het is de FileGroup die we eerder hebben gemaakt.
We kunnen dit ook verifiëren via tabeleigenschappen. Klik met de rechtermuisknop op een tabel in SSMS. In het gedeelte Opslag kunnen we de gewenste bestandsgroep zien.
SELECTEER IN met een Where-voorwaarde
Stel dat we een tabel willen maken met een SQL SELECT INTO-instructie met een paar records erin. We kunnen een Where-clausule gebruiken die lijkt op een select-instructie.In de volgende zoekopdracht willen we een person.person_WC-tabel maken voor de persoon met de achternaam is als% Duf%.
1
2
3
4
|
select * into person.person_WC
ON INSERTFILE – Verifieer tabel Bestandsgroep
van person.person
waar Achternaam als “% Duf%”
|
Conclusie
In dit artikel hebben we de SQL onderzocht SELECTEER IN de instructie en de gebruiksscenarios ervan. Het is een handig commando om een kopie van een tabel te maken zonder datatypes op te geven.
- Auteur
- Recente berichten
Hij is de maker van een van de grootste gratis online verzamelingen artikelen over één onderwerp, met zijn 50-delige serie over SQL Server Always On Availability Groups. Op basis van zijn bijdrage aan de SQL Server-gemeenschap, is hij bekroond met verschillende prijzen, waaronder de prestigieuze “Beste auteur van het jaar”, continu in 2020 en 2021 bij SQLShack.
Raj is altijd geïnteresseerd in nieuwe uitdagingen, dus als je advies nodig hebt hulp bij elk onderwerp dat in zijn geschriften aan bod komt, hij is te bereiken op [email protected]
Bekijk alle berichten van Rajendra Gupta
- Kleine en grote versie-upgrades uitvoeren voor AWS RDS SQL Server – 29 januari 2021
- Implementatie van AWS RDS PostgreSQL-instances – 27 januari 2021
- Migratie van uw lokale SQL-databases naar AWS RDS SQL Server met behulp van AWS DMS – 25 januari , 2021