SQLShack (Dansk)

Denne artikel dækker SQL SELECT INTO-sætningen inklusive syntaks, parametre og brug med flere tabeller, filgrupper og en WHERE-tilstand

Vi indsætter regelmæssigt data i SQL Server-tabeller enten fra et program eller direkte i SSMS. Vi kan indsætte data ved hjælp af INSERT INTO-sætningen. For at gøre dette skal vi allerede have en tabel til at indsætte data i den, da vi ikke kan oprette en tabel ved hjælp af Indsæt i udsagnet.

Vi skal udføre følgende opgaver ved hjælp af INSERT INTO-sætningen.

  • Opret en tabelstruktur med passende datatyper
  • Indsæt data i den

Men den gode nyhed er, at vi kan udføre begge opgaver sammen, elegant ved hjælp af SQL SELECT INTO-sætningen. Det opretter en tabelstruktur for de kolonner, der returneres af Select-sætningen.

Antag, at vi vil opdatere mange poster i en tabel. Vi kan bruge SELECT INTO-sætningen til at oprette en backup-tabel med den eksisterende struktur fra kildetabellen. Lad os udforske SELECT INTO i denne artikel.

SELECT INTO statement syntax

1
2
3
4

VÆLG kolonne1, kolonne2 .. .ColumnN
INTO New_table
FRA tabeller
;

Parametre i SELECT INTO-erklæringen

  • Kolonneliste: Vi skal specificere kolonne, vi vil hente og indsætte i en ny tabel
  • Ny_tabel: Vi kan angive det nye tabelnavn her. SQL Server opretter en ny tabel med kolonner nævnt i kolonnelisten. Vi kan ikke erstatte en eksisterende tabel ved hjælp af denne. Tabelnavn skal være entydigt
  • Tabeller: Det indeholder en tabel, hvorfra vi vil hente poster. Vi kan også have defineret flere tabeller her med den rette Join-klausul
  • WHERE betingelser: Vi kan filtrere poster ved hjælp af Where-klausul. Det er en valgfri klausul

Lad os udforske SQL SELECT INTO-sætningen ved hjælp af eksempler.

Miljø:

I dette eksempel bruger vi eksempeldatabase AdventureWorks2017. Antag, at vi vil vælge poster fra tabellen og oprette en ny tabel ved hjælp af SELECT INTO-sætningen. Vi ønsker kun valgte kolonner i den nye tabel. Lad os køre en udvælgelseserklæring på medarbejdertabellen med de kolonner, vi vil have.

Før vi udfører SQL SELECT INTO erklæring, kan vi kontrollere, at Employee_Demo-tabellen ikke findes i AdventureWorks2017-databasen ved hjælp af sp_help-kommandoen.

1

sp_help “..”

I det følgende skærmbillede kan vi se, at Employee_Demo-tabellen ikke findes i min database.

Udfør følgende forespørgsel for at oprette en ny tabel ved hjælp af SELECT INTO-sætningen.

Vi får følgende outputmeddelelse i Azure Data Studio. Du kan bemærke, at antallet af berørte rækker er 10. I forespørgslen valgte vi top 10 poster fra en medarbejdertabel.

Vi kan få adgang til data fra den nyoprettede tabel Employee_Demo og kontrollere, at den indeholder de samme poster som i vores tidligere select-sætning.

Vi specificerede ingen kolonneegenskaber i SQL SELECT INTO-sætningen. Lad os sammenligne kilde- og destinationstabelkolonnerne og deres egenskaber.

Vi kan køre sp_help tablenavn -kommandoen på både medarbejder- og medarbejderdemotabellen. Jeg kopierede output fra begge tabeller i excel (for udvalgte kolonner). I det følgende skærmbillede kan du se, at kolonnens datatype og deres egenskaber er ens.

I den forrige SQL SELECT INTO-sætning , forberedte vi en destinationstabel (Employee_Demo) fra et par kolonner i kildetabellen (Medarbejder).

Lad os oprette en anden tabel med alle kolonner i en medarbejdertabel med følgende forespørgsel.

I output kan vi se, at den er indsat 290 rækker i tabellen Employee_All.

Vi har verificeret, at SELECT INTO erklæring opretter en ny tabel med kolonner angivet i kolonnelisten. Det opretter også en lignende datatype i destinationstabellen.

Antag, at vi har primære og udenlandske nøgler i kildetabellen. Skaber det en primær nøgle og en fremmed nøgle, der også ligner kildetabellen? Nej, SQL SELECT INTO-sætningen opretter ikke nogen nøgler i destinationstabellen. Hvis vi vil, kan vi definere taster på destinationsbordet. Lad os kontrollere dette i det følgende afsnit.

I mit tidligere eksempel indeholder medarbejdertabellen den primære og udenlandske nøgle, der er defineret på den. Vi kan få en liste over eksisterende nøgler ved hjælp af INFORMATION_SCHEMA-visningen. Udfør følgende kode, og den returnerer eksisterende primære og udenlandske nøgler i medarbejdertabellen.

Vi kan se, medarbejdertabellen indeholder primære og udenlandske nøgler.

Vi kopierede alle kolonner i Employee_All fra medarbejdertabellen. Vi er nødt til at kontrollere primær- og fremmednøglen i destinationstabellen nu.

Vi kan se, at den ikke indeholder nogen nøgler i destinationstabellen. Det giver os fleksibilitet til at definere nøgler i destinationsbordet.

SQL SELECT INTO – Indsæt data fra flere tabeller

I tidligere eksempler oprettede vi en tabel ved hjælp af SELECT INTO-erklæringen fra en enkelt medarbejder. Vi kan også deltage i flere tabeller og bruge SELECT INTO-sætningen til også at oprette en ny tabel med data. I dette afsnit vil vi sammenføje flere tabeller. I den følgende forespørgsel sluttede vi os til følgende tabeller i AdventureWorks2017.

Udfør følgende forespørgsel. Det giver resultater fra flere tabeller baseret på sammenkædningsbetingelse og nævnte kolonner.

Udfør en forespørgsel, og vi følger output fra SQL SELECT INTO-sætningen.

Vi vil oprette en tabel med data, der returneres ved hjælp af ovenstående tabel. Lad os udføre SQL SELECT INTO-sætningen.

Den opretter. og indsæt data i den. Vi kan verificere poster i denne tabel ved hjælp af sætningen.

Vi kan se, at du kan sammenføje flere tabeller og skabe output tabel ved hjælp af SELECT INTO-sætningen.

Vi behøver ikke tage sig af at definere datatyper til destinationstabellen. Hvis vi vil oprette en tabel manuelt, skal vi se på datatypen for hver kolonne og definere datatype i overensstemmelse hermed. Hvis der er en uoverensstemmelse mellem datatyper, kan du få en fejlmeddelelse som følgende.

Fejl 1: På grund af en uoverensstemmelse i datatyper

Msg 245, niveau 16, tilstand 1 , Linje 1 – Konvertering mislykkedes ved konvertering af varchar-værdien GG til datatype int.

Fejl 2: Msg 8152, niveau 16, tilstand 30, linje 2

streng eller binære data ville blive afkortet.

Vi får ikke disse fejl, når vi indsætter data ved hjælp af SQL SELECT INTO-sætningen. Vi kan dog ikke indsætte data i eksisterende tabeller ved hjælp af denne metode.

SELECT INTO – Specify Filegroup

I tidligere sektioner undersøgte vi, at vi kan oprette en ny tabel og indsætte data i den ved hjælp af SQL SELECT INTO-sætningen fra eksisterende tabeller. Det opretter kun en tabel i standardfilgruppe. Vi kan ikke angive en bestemt filgruppe før SQL Server 2016. I SQL Server 2017 kan vi specificere en bestemt filgruppe, hvori en ny tabel skal oprettes. SQL Server opretter en ny tabel i den bestemte Bekræft tabel Filgruppe. Hvis vi ikke angiver nogen filgrupper i SQL Server 2017 og derover, opretter den en tabel i standardfilgruppen.

Bemærk: Vi kan ikke specificere filgrupper i SQL SELECT INTO til SQL Server 2016 og før.

Lad os tilføje en ny filgruppe i AdventureWorks2017-databasen. Højreklik på databasen, og gå til Filegroups.

På denne Filegroup-side skal du klikke på Tilføj FileGroup og angive et navn til Filegroup.

Klik nu på filer, og det viser eksisterende databasefiler (data- og logfil) på denne side, tilføj en ny datafil, og angiv FileGroup fra rullelisten. Det skulle være FileGroup, vi oprettede lige nu.

Vi vil oprette en SQL-tabel i INSERTFILE Filegroup. Vi har ikke indstillet denne filgruppe som standardfilgruppe.

I den følgende forespørgsel kan du se, at vi har angivet filgruppens navn ved hjælp af ON-klausulen. Det fungerer på samme måde som en almindelig SQL SELECT INTO-sætning med forskel i en filgruppe.

1
2
3

vælg * til person. Person_temp
PÅ INSERTFIL –FILEGROUP NAVN
fra person. Person

Når tabellen er oprettet, skal du udføre en sp_help-kommando på denne nyoprettede tabel. I det følgende skærmbillede kan vi kontrollere, at tabellen er placeret i INSERTFILE FileGroup. Det er FileGroup, vi oprettede tidligere.

Vi kan også bekræfte dette ud fra tabelegenskaber. Højreklik på en tabel i SSMS. I lagringsafsnittet kan vi se den ønskede FileGroup.

VÆLG INTO med en Where-betingelse

Antag, at vi vil oprette en tabel med en SQL SELECT INTO-sætning med få poster i den. Vi kan bruge en Where-klausul svarende til en valgt sætning.I den følgende forespørgsel vil vi oprette en person. Person_WC-tabel for den person, der har efternavnet, er som% Duf%.

1
2
3
4

vælg * til person.person_WC
PÅ INSERTFIL – Bekræft tabel Filegruppe
fra person.person
hvor Efternavn som “% Duf%”

Konklusion

I denne artikel undersøgte vi SQL SELECT INTO-sætning og dens brugsscenarier. Det er en nyttig kommando at oprette en kopi af en tabel uden at specificere datatyper.

  • Forfatter
  • Seneste indlæg
Som MCSA-certificeret og Microsoft Certified Trainer i Gurgaon, Indien, med 13 års erfaring, arbejder Rajendra for en række store virksomheder med fokus på ydeevneoptimering, overvågning, høj tilgængelighed og katastrofegendannelsesstrategier og implementering. Han er forfatter til hundredvis af autoritative artikler om SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git og relaterede teknologier, der er blevet set af over 10m læsere til dato.
Han er skaberen af en af de største gratis online samlinger af artikler om et enkelt emne med sin 50-dels serie om SQL Server Always On Availability Groups. Baseret på hans bidrag til SQL Server-samfundet er han blevet anerkendt med forskellige priser, herunder den prestigefyldte “Årets bedste forfatter” kontinuerligt i 2020 og 2021 hos SQLShack.
Raj er altid interesseret i nye udfordringer, så hvis du har brug for rådgivning hjælp til ethvert emne, der er dækket af hans skrifter, han kan nås på [email protected]
Se alle indlæg af Rajendra Gupta

Seneste indlæg af Rajendra Gupta (se alle)
  • Udfører mindre og større versionopgraderinger til AWS RDS SQL Server – 29. januar 2021
  • Implementering af AWS RDS PostgreSQL-forekomster – 27. januar 2021
  • Migrering af lokale SQL-databaser til AWS RDS SQL Server ved hjælp af AWS DMS – 25. januar , 2021

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *