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.

  1. Vi definerer CTE med en WITH-ledd før SELECT, INSERT, UPDATE, DELETE-setning
  2. 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.

  1. Opprett en SQL Table-variabel med passende kolonnedatatyper. Vi må bruke datatypen TABLE for tabellvariabelen
  2. Utfør en INSERT INTO SELECT-setning for å sette inn data i en tabellvariabel
  3. 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
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 til nå har blitt sett av over 10m lesere.
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

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 *