SQLShack (Norsk)

Denne artikkelen vil dekke SQL SELECT INTO-setningen inkludert syntaks, parametere og bruk med flere tabeller, filgrupper og en WHERE-tilstand

Vi setter regelmessig inn data i SQL Server-tabeller enten fra et program eller direkte i SSMS. Vi kan sette inn data ved hjelp av INSERT INTO-setningen. For å gjøre dette, bør vi ha en tabell som allerede er på plass for å sette inn data i den, da vi ikke kan lage en tabell ved hjelp av Sett inn i setningen.

Vi må gjøre følgende oppgaver ved å bruke INSERT INTO-setningen.

  • Lag en tabellstruktur med passende datatyper
  • Sett inn data i den

Men den gode nyheten er at vi kan gjøre begge oppgavene sammen, elegant, ved hjelp av SQL SELECT INTO-setningen. Det oppretter en tabellstruktur for kolonnene som returneres av Select-setningen.

Anta at vi vil oppdatere mange poster i en tabell. Vi kan bruke SELECT INTO-setningen til å lage en sikkerhetskopitabell med den eksisterende strukturen fra kildetabellen. La oss utforske SELECT INTO i denne artikkelen.

SELECT INTO statement syntax

1
2
3
4

VELG kolonne1, kolonne2 .. .ColumnN
INN Ny_tabell
FRA tabeller
;

Parametere i SELECT INTO Statement

  • Kolonneliste: Vi må spesifisere kolonne vi vil hente og sette inn i en ny tabell
  • Ny_tabell: Vi kan spesifisere det nye tabellnavnet her. SQL Server oppretter en ny tabell med kolonner nevnt i kolonnelisten. Vi kan ikke erstatte en eksisterende tabell ved hjelp av denne. Tabellnavnet skal være unikt
  • Tabeller: Den inneholder en tabell der vi ønsker å få poster. Vi kan også ha definert flere tabeller her med riktig Join-klausul
  • HVOR forhold: Vi kan filtrere poster ved hjelp av Where-klausul. Det er en valgfri klausul

La oss utforske SQL SELECT INTO-setningen ved hjelp av eksempler.

Miljø:

I dette eksemplet bruker vi eksempeldatabase AdventureWorks2017. Anta at vi vil velge poster fra tabellen og lage en ny tabell ved hjelp av SELECT INTO-setningen. Vi ønsker bare valgte kolonner i den nye tabellen. La oss kjøre en velg utsagn på medarbeidertabellen med kolonnene vi vil ha.

Før vi utfører SQL SELECT INTO uttalelse, kan vi bekrefte at Employee_Demo-tabellen ikke eksisterer i AdventureWorks2017-databasen ved hjelp av sp_help-kommandoen.

1

sp_help «..»

I skjermbildet nedenfor kan vi se at tabellen Employee_Demo ikke finnes i databasen min.

Utfør følgende spørsmål for å opprette en ny tabell ved hjelp av SELECT INTO-setningen.

Vi får følgende outputmelding i Azure Data Studio. Du kan merke deg at antall rader som er berørt er 10. I spørringen valgte vi de 10 beste postene fra en ansatt-tabell.

Vi kan få tilgang til data fra den nyopprettede tabellen Employee_Demo og bekrefte at den inneholder samme poster som i vårt tidligere utvalgte utsagn.

Vi spesifiserte ingen kolonneegenskaper i SQL SELECT INTO-setningen. La oss sammenligne kilde- og destinasjonstabellkolonnene og egenskapene deres.

Vi kan kjøre kommandoen sp_help ‘tabellnavn’ på både ansatt og ansatt_demotabell. Jeg kopierte utdataene fra begge tabeller i excel (for utvalgte kolonner). I det følgende skjermbildet kan du se at kolonnedatatypen og egenskapene deres er like.

I forrige SQL SELECT INTO-setning , vi utarbeidet en destinasjonstabell (Employee_Demo) fra noen få kolonner i kildetabellen (Employee).

La oss lage en annen tabell med alle kolonnene i en Employee-tabell med følgende spørsmål.

I utgangen kan vi se at den er satt inn 290 rader i tabellen Employee_All.

Vi har bekreftet at SELECT INTO uttalelse oppretter en ny tabell med kolonner spesifisert i kolonnelisten. Det oppretter også en lignende datatype i destinasjonstabellen.

Anta at vi har primære og utenlandske nøkler i kildetabellen. Skaper det en primærnøkkel og en fremmed nøkkel, lik kildetabellen? Nei, SQL SELECT INTO-setningen oppretter ikke noen nøkler i måltabellen. Hvis vi vil, kan vi definere nøkler på destinasjonstabellen. La oss verifisere dette i neste avsnitt.

I mitt tidligere eksempel inneholder medarbeidertabellen primær og utenlandsk nøkkel definert på den. Vi kan få en liste over eksisterende nøkler ved hjelp av INFORMATION_SCHEMA-visningen. Utfør følgende kode, og den returnerer eksisterende primære og utenlandske nøkler i medarbeidertabellen.

Vi kan se, medarbeidertabellen inneholder primære og utenlandske nøkler.

Vi kopierte alle kolonnene i Employee_All fra tabellen Employee. Vi må sjekke primær og utenlandsk nøkkel på destinasjonstabellen nå.

Vi kan se at den ikke inneholder noen nøkler i destinasjonstabellen. Det gir oss fleksibilitet til å definere nøkler på destinasjonstabellen.

SQL SELECT INTO – Sett inn data fra flere tabeller

I tidligere eksempler opprettet vi en tabell ved hjelp av SELECT INTO-setningen fra en enkelt ansatt. Vi kan også bli med i flere tabeller og bruke SELECT INTO-setningen til å lage en ny tabell med data også. I denne delen ønsker vi å koble sammen flere tabeller. I det følgende spørsmålet sluttet vi oss til følgende tabeller i AdventureWorks2017.

Utfør følgende spørsmål. Det gir resultater fra flere tabeller basert på sammenføyningsbetingelser og nevnte kolonner.

Utfør et spørsmål, og vi følger utdataene fra SQL SELECT INTO-setningen.

Vi ønsker å lage en tabell med data som returneres ved hjelp av tabellen ovenfor. La oss utføre SQL SELECT INTO-setningen.

Den oppretter. tabellen og sett inn data i den. Vi kan verifisere poster i denne tabellen ved å velge setningen.

Vi kan se at du kan koble sammen flere tabeller og skape utdata ved å bruke SELECT INTO-setningen.

Vi trenger ikke å ta oss av å definere datatyper for destinasjonstabellen. Hvis vi vil lage en tabell manuelt, må vi se på datatypen for hver kolonne og definere datatype deretter. Hvis det er uoverensstemmelse mellom datatyper, kan du få en feilmelding som følgende.

Feil 1: På grunn av uoverensstemmelse i datatyper

Msg 245, nivå 16, tilstand 1 , Linje 1
Konvertering mislyktes ved konvertering av varchar-verdien GG til datatype int.

Feil 2: Msg 8152, nivå 16, tilstand 30, linje 2

streng eller binære data vil bli avkortet.

Vi får ikke disse feilene mens vi setter inn data ved hjelp av SQL SELECT INTO-setningen. Vi kan imidlertid ikke sette inn data i eksisterende tabeller ved hjelp av denne metoden.

SELECT INTO – Specify Filegroup

I forrige seksjoner undersøkte vi at vi kan lage en ny tabell og sette inn data i den ved å bruke SQL SELECT INTO-setningen fra eksisterende tabeller. Det oppretter bare en tabell i standard filgruppe. Vi kan ikke spesifisere en bestemt filgruppe før SQL Server 2016. I SQL Server 2017 kan vi spesifisere en bestemt filgruppe der en ny tabell skal opprettes. SQL Server oppretter en ny tabell i den bestemte Verifiser tabellfilgruppen. Hvis vi ikke spesifiserer noen filgrupper i SQL Server 2017 og nyere, oppretter den en tabell i standard filgruppe.

Merk: Vi kan ikke spesifisere filgrupper i SQL SELECT INTO for SQL Server 2016 og før.

La oss legge til en ny filgruppe i AdventureWorks2017-databasen. Høyreklikk på databasen og gå til Filgrupper.

På denne Filgruppesiden klikker du på Legg til filgruppe og angir et navn for filgruppe.

Nå klikker du på Filer og det viser en liste over eksisterende databasefiler (data og loggfil). På denne siden, legg til en ny datafil og spesifiser FileGroup fra rullegardinlisten. Det skal være FileGroup vi opprettet akkurat nå.

Vi ønsker å lage en SQL-tabell i INSERTFILE Filegroup. Vi har ikke angitt denne filgruppen som standard filgruppe.

I det følgende spørsmålet kan du se at vi spesifiserte filgruppenavnet ved hjelp av ON-leddet. Det fungerer som en vanlig SQL SELECT INTO-setning med forskjell i en filgruppe.

1
2
3

velg * til person. Person_temp
PÅ INSERTFIL – FILEGROUP NAVN
fra person. Person

Når tabellen er opprettet, utfører du en sp_help-kommando på denne nyopprettede tabellen. I det følgende skjermbildet kan vi bekrefte at tabellen ligger i INSERTFILE FileGroup. Det er FileGroup vi opprettet tidligere.

Vi kan også bekrefte dette fra tabellegenskaper. Høyreklikk på en tabell i SSMS. I lagringsdelen kan vi se ønsket FileGroup.

VELG INN med en Where-tilstand

Anta at vi vil lage en tabell med en SQL SELECT INTO-setning med få poster i den. Vi kan bruke en Where-ledd som ligner på en valgt setning.I det følgende spørsmålet ønsker vi å opprette en person.person_WC-tabell for personen som har etternavnet er som% Duf%.

1
2
3
4

velg * til person.person_WC
PÅ INSERTFIL – Bekreft tabell Filgruppe
fra person.person
der Etternavn som «% Duf%»

Konklusjon

I denne artikkelen undersøkte vi SQL VELG INTO-setning og bruksscenarier. Det er en nyttig kommando å lage en kopi av en tabell uten å spesifisere datatyper.

  • Forfatter
  • Nylige innlegg
Som MCSA-sertifisert og Microsoft Certified Trainer i Gurgaon, India, med 13 års erfaring, arbeider Rajendra for en rekke store selskaper med fokus på ytelsesoptimalisering, overvåking, høy tilgjengelighet og katastrofegjenopprettingstrategier og implementering. Han er forfatter av hundrevis av autoritative artikler om SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git og relaterte teknologier som har blitt sett av over 10m lesere til dags dato.
Han er skaperen av en av de største gratis online samlingene av artikler om et enkelt emne, med sin 50-delte serie om SQL Server Always On Availability Groups. Basert på sitt bidrag til SQL Server-fellesskapet, har han blitt anerkjent med forskjellige priser, inkludert den prestisjetunge «Årets beste forfatter» kontinuerlig i 2020 og 2021 på SQLShack.
Raj er alltid interessert i nye utfordringer, så hvis du trenger rådgivning hjelp til ethvert emne som dekkes i hans skrifter, kan du nås på [email protected]
Se alle innlegg av Rajendra Gupta

Siste innlegg av Rajendra Gupta (se alle)
  • Utfører mindre og større versjonsoppgraderinger for AWS RDS SQL Server – 29. januar 2021
  • Distribuere AWS RDS PostgreSQL-forekomster – 27. januar 2021
  • Overføre lokale SQL-databaser til AWS RDS SQL Server ved hjelp av AWS DMS – 25. januar , 2021

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *