SQLShack (Norsk)
Denne artikkelen dekker SQL INSERT INTO SELECT-setningen sammen med syntaksen, eksempler og brukssaker.
I min tidligere artikkel SQL SELECT INTO Statement utforsket vi følgende oppgaver.
- Opprett en SQL-tabell mens du setter inn poster med passende datatyper
- Bruk SQL SELECT INTO til å sette inn poster i en bestemt FileGroup
- Vi kan ikke bruke den til å sette inn data i en eksisterende tabell
INSERT INTO SELECT-setningen
Vi ønsker å sette inn poster som en vanlig databaseaktivitet. Vi kan sette inn data direkte ved hjelp av klientverktøy som SSMS, Azure Data Studio eller direkte fra et program. I SQL bruker vi SQL INSERT INTO-setningen til å sette inn poster.
Syntaksen til INSERT INTO
Når vi setter inn data i tabellen, kan vi bruke følgende syntaks for vår SQL INSERT INTO-setning.
1
2
|
INSERT INTO table_name (Column1, Column 2 ….)
VALUES (value1, value2, …);
|
Hvis vi har spesifisert alle kolonneverdier per tabellkolonne bestillinger, trenger vi ikke å spesifisere kolonnenavn. Vi kan sette inn poster direkte i tabellen.
1
2
|
INSERT INTO table_name
VALUES (value1, value2, …);
|
La oss lage en eksempeltabell og sette inn data i den .
1
2
3
4
|
OPPRETT TABELL Ansatte
(ID INT,
Navn VARCHAR (20)
);
|
Vi kan sette inn data ved hjelp av følgende spørsmål. Begge spørsmålene er gyldige for datainnsetting.
1
2
|
Sett inn i ansatte (ID, navn) verdier (1, «raj»)
Sett inn i ansatte verdier (2, «raj»)
|
Vi kan ikke sette inn data uten å spesifisere kolonnenavn hvis det er en misforholdet mellom datainnsetting og rekkefølgen på kolonneverdiene er forskjellig. Vi kan få følgende feilmelding.
- Msg 213, nivå 16, tilstand 1, linje 6
Kolonnenavn eller antall leverte verdier ikke samsvarer med tabelldefinisjon.
- Msg 245, Nivå 16, Tilstand 1, Linje 6
Konvertering mislyktes ved konvertering av varchar-verdien raj til datatype int.
I dette eksemplet bruker vi SQL INSERT INTO-setningen med å levere verdier direkte i en setning. Anta at vi vil sette inn data fra en annen tabell. Vi kan fortsatt bruke SQL INSERT INTO-setningen med en valgt setning. La oss utforske dette i neste avsnitt.
INSERT INTO SELECT Statement Syntax
Vi kan sette inn data fra andre SQL-tabeller i en tabell med følgende INSERT INTO SELECT-setning.
1
2
3
|
INSERT IN table1 (col1, col2, col3,…)
VELG col1, col2, col3,…
FRA table2
|
Dette spørsmålet utfører følgende oppgaver:
- Den velger først poster fra en tabell (Velg uttalelse)
- Deretter setter den inn i en tabell spesifisert med INSERT INTO
- Merk: Kolonnestrukturen skal matche mellom kolonnen returnert av SELECT-setning og destinasjonstabell.
INSERT INTO VELG eksempler
Eksempel 1: sett inn data fra alle kolonnene i kildetabellen til destinasjonstabellen
Vi har følgende poster i en eksisterende medarbeidertabell.
La oss lage en annen tabellkunder med følgende spørsmål.
1
2
3
4
|
OPPRETT TABELL Kunder
(ID INT,
Navn VARCHAR (20)
);
|
Vi ønsker å sette inn alle poster fra tabellen ansatte til kundetabellen. Vi kan bruke SQL INSERT INTO SELECT-setningen for å gjøre dette.
1
2
3
|
INSERT INTO Kunder
VELG *
FRA ansatte;
|
Den setter alle poster inn i kundetabellen. Vi kan bekrefte at postene i tabellen Kunder ligner på tabellen Ansatte.
I dette eksemplet satte vi inn poster for alle kolonner til kundetabellen.
Eksempel 2: Sett inn rader fra kilde til destinasjonstabell ved å spesifisere kolonnenavn
La oss slippe den eksisterende kundetabellen før vi går videre. Nå ønsker vi å lage en tabell med en ekstra IDENTITY-kolonne. IDENTITY-kolonnen setter automatisk inn identitetsverdier i en tabell. Vi la også til en bykolonne som tillater NULL-verdier
1
2
3
4
5
6
|
CREATE TABELL Kunder
(ID INT IDENTITET (1, 1),
Emp_ID INT,
Navn VARCHAR (20),
By VARCHAR (20) NULL,
);
|
Vi kan ikke bruke setningen INSERT INTO SELECT som ligner på ovenfor eksempel. Hvis vi prøver å kjøre denne koden, får vi en feilmelding.
1
2
3
|
INSERT INTO Kunder
VELG *
FRA ansatte ;
|
I dette tilfellet må vi spesifisere kolonnenavnet med INSERT INTO-setning.
1
2
3
|
INSERT INTO Customers (Emp_ID, Name)
VELG *
FRA ansatte;
|
I tabellen Kunder har vi en ekstra kolonne med tillater NULL-verdier. La oss kjøre en Select on Customers-tabell. I det følgende skjermbildet kan vi se NULL-verdier i bykolonnen.
Anta at du har en annen kolonne i kildetabellen. Du kan fremdeles sette inn poster i destinasjonstabellen med spesifikke kolonnenavn i setningen INSERT INTO SELECT. Vi bør ha en passende datatype for å sette inn data. Du kan ikke sette inn varchar-kolonnedata i en INT-kolonne.
Legg til en ny kolonne i tabellen Staff ved å bruke ALTER TABLE-setningen.
1
2
|
ALTER TABLE Ansatte
LEGG TIL Land varchar (50);
|
Oppdater tabelloppføringene med landverdien India.
1
|
Oppdater ansatte satt Land = «India»
|
Kjør INSERT INTO på nytt VELG uttalelse. Du kan legge merke til at vi bruker SELECT * i stedet for å spesifisere kolonnenavn.
1
2
3
|
INSERT INTO Customers (Emp_ID, Name)
VELG *
FRA ansatte;
|
Vi får følgende feilmelding. Denne feilen skyldes kolonneforskjellen mellom kildetabellen og destinasjonstabellen.
Vi kan kartlegge kolonnen mellom kilden og destinasjonstabellen ved hjelp av følgende spørsmål.
1
2
3
4
5
6
|
INSERT INTO Kunder
(Emp_ID,
Navn
)
VELG ID, navn
FRA ansatte;
|
Eksempel 3: Sett inn øverste rader ved hjelp av INSERT INTO SELECT uttalelse
Anta at vi vil sette inn Topp N-rader fra kildetabellen til destinasjonstabellen. Vi kan bruke toppsetningen i INSERT INTO SELECT-setningen. I det følgende spørsmålet setter den inn den øverste 1-raden fra tabellen Ansatte til tabellen Kunder.
1
2
3
4
5
6
|
INSERT TOPP (1) TIL KUNDER
(Emp_ID,
Navn
)
VELG ID, navn
FRA ansatte;
|
Eksempel 4: Sett inn med begge kolonnene og definerte verdier i SQL INSERT INTO SELECT-setningen
I tidligere eksempler spesifiserte vi enten spesifikke verdier i INSERT INTO-setningen eller bruk INSERT INTO SELECT for å hente poster fra kildetabellen og sette dem inn i måltabellen.
Vi kan kombinere både kolonner og definerte verdier i SQL INSERT INTO SELECT-setningen.
Vi har følgende kolonner i tabellen Kunder og ansatte. Tidligere har vi ikke satt inn noen verdier for bykolonnen. Vi har ikke de nødvendige verdiene i medarbeidertabellen også. Vi må spesifisere en eksplisitt verdi for bykolonnen.
I det følgende spørsmålet spesifiserte vi en verdi for byen kolonnen mens resten av verdiene vi la inn fra tabellen Ansatte.
1
2
|
INSERT TOPP (1) I KUNDER (Emp_ID, navn, by)
VELG ID, navn, «Delhi» FRA ansatte;
|
I det følgende spørsmålet kan vi se at det setter inn en rad (på grunn av topp (1) klausul) sammen med verdi for bykolonnen.
Eksempel 5: INSERT INTO SELECT uttalelse med Join-klausul for å få data fra flere tabeller
Vi kan bruke en JOIN-klausul for å få data fra flere tabeller. Disse tabellene er knyttet til forhold som er spesifisert med ON-klausulen. Anta at vi vil hente data fra flere tabeller og sette dem inn i en tabell.
I dette eksemplet bruker jeg AdventureWorks2017-databasen. Først oppretter du en ny tabell med riktige datatyper.
Denne tabellen skal inneholde poster fra utdataene fra et spørringssystem for flere tabeller. Utfør følgende spørring for å sette inn data i HumanResources.EmployeeData-tabellen.
Eksempel 6: INSERT INTO SELECT statement with vanlig tabelluttrykk
Vi bruker Common Table Expressions (CTE) for å forenkle kompleks sammenføyning fra flere kolonner. I forrige eksempel brukte vi JOINS i en Select-setning for å sette inn data i en SQL-tabell. I denne delen vil vi omskrive spørringen med CTE.
I en CTE kan vi dele koden i to deler.
- Vi definerer CTE med en WITH-ledd før SELECT, INSERT, UPDATE, DELETE-setning
- Når vi har definert CTE, kan vi referere til CTE som ligner på en relasjonell SQL-tabell
Utfør følgende kode for å sette inn data ved hjelp av en CTE.
Eksempel 7 : INSERT INTO SELECT setning med en tabellvariabel
Vi bruker tabellvariabler på samme måte som en midlertidig tabell. Vi kan erklære dem ved hjelp av tabelldatatypen. Denne tabellen kan brukes til å utføre aktiviteter i SQL Server der vi ikke trenger en permanent tabell. Du kan dele følgende spørsmål i tre deler.
- Opprett en SQL Table-variabel med passende kolonnedatatyper. Vi må bruke datatypen TABLE for tabellvariabelen
- Utfør en INSERT INTO SELECT-setning for å sette inn data i en tabellvariabel
- Se resultatsettet for tabellvariabelen
Konklusjon
I denne artikkelen undersøker vi brukssakene til INSERT INTO SELECT-setningen. Jeg håper du syntes denne artikkelen var nyttig. Gi gjerne tilbakemelding i kommentarene nedenfor.
- Forfatter
- Nylige innlegg
Han er skaper 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 forfatterskap, han kan nås på [email protected]
Se alle innlegg av Rajendra Gupta
- 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