SQLShack (Svenska)

Denna artikel kommer att täcka SQL SELECT INTO-satsen inklusive syntax, parametrar och användning med flera tabeller, filgrupper och ett WHERE-tillstånd

Vi infogar regelbundet data i SQL Server-tabeller antingen från ett program eller direkt i SSMS. Vi kan infoga data med hjälp av INSERT INTO-uttalandet. För att göra detta borde vi ha en tabell som redan finns för att infoga data i den, eftersom vi inte kan skapa en tabell med hjälp av Insert in the statement.

Vi måste göra följande uppgifter med INSERT INTO-uttalandet.

  • Skapa en tabellstruktur med lämpliga datatyper
  • Infoga data i den

Men den goda nyheten är att vi kan göra både uppgiften tillsammans, elegant, med SQL SELECT INTO-satsen. Det skapar en tabellstruktur för kolumnerna som returneras av Select-uttalande.

Antag att vi vill uppdatera många poster i en tabell. Vi kan använda SELECT INTO-uttalandet för att skapa en reservtabell med den befintliga strukturen från källtabellen. Låt oss utforska SELECT INTO i den här artikeln.

SELECT INTO statement syntax

1
2
3
4

VÄLJ kolumn1, kolumn2 .. .ColumnN
IN New_table
FROM tables
;

Parametrar i SELECT INTO Statement

  • Kolumnlista: Vi måste ange kolumn som vi vill hämta och infoga i en ny tabell
  • Ny_tabell: Vi kan ange det nya tabellnamnet här. SQL Server skapar en ny tabell med kolumner som nämns i kolumnlistan. Vi kan inte ersätta en befintlig tabell med den här. Tabellnamn ska vara unikt
  • Tabeller: Den innehåller en tabell där vi vill hämta poster. Vi kan också ha flera tabeller definierade här med rätt anslutningsklausul
  • VILLKOR: Vi kan filtrera poster med hjälp av Where-klausulen. Det är en valfri klausul

Låt oss utforska SQL SELECT INTO-uttalandet med hjälp av exempel.

Miljö:

I det här exemplet använder vi exempeldatabas AdventureWorks2017. Antag att vi vill välja poster från tabellen och skapa en ny tabell med SELECT INTO-satsen. Vi vill bara ha valda kolumner i den nya tabellen. Låt oss köra ett valt uttalande på anställdstabellen med de kolumner vi vill ha.

Innan vi kör SQL SELECT INTO uttalande kan vi verifiera att tabellen Employee_Demo inte finns i AdventureWorks2017-databasen med kommandot sp_help.

1

sp_help ”..”

I följande skärmdump kan vi se att tabellen Employee_Demo inte finns i min databas.

Utför följande fråga för att skapa en ny tabell med SELECT INTO-uttalandet.

Vi får följande utgående meddelande i Azure Data Studio. Du kan notera att antalet berörda rader är 10. I frågan valde vi topp 10-poster från en anställdstabell.

Vi kan komma åt data från den nyskapade tabellen Employee_Demo och verifiera att den innehåller samma poster som i vårt tidigare valda uttalande.

Vi specificerade inga kolumnegenskaper i SQL SELECT INTO-satsen. Låt oss jämföra käll- och måltabellkolumnerna och deras egenskaper.

Vi kan köra kommandot sp_help tabellnamn på både anställd och anställd_demotabell. Jag kopierade utdata från båda tabellerna i Excel (för valda kolumner). I följande skärmdump kan du se att kolumndatatyp och deras egenskaper är lika.

I föregående SQL SELECT INTO-uttalande , förberedde vi en måltabell (Employee_Demo) från några kolumner i källtabellen (Employee).

Låt oss skapa en annan tabell med alla kolumner i en Employee-tabell med följande fråga. p> I utgången kan vi se att den infogades 290 rader i tabellen Employee_All.

Vi har verifierat att SELECT INTO uttalande skapar en ny tabell med kolumner som anges i kolumnlistan. Det skapar också en liknande datatyp i destinationstabellen.

Antag att vi har primära och främmande nycklar i källtabellen. Skapar den en primär nyckel och en främmande nyckel som liknar källtabellen? Nej, SQL SELECT INTO-satsen skapar inga nycklar i måltabellen. Om vi vill kan vi definiera tangenter i måltabellen. Låt oss verifiera detta i följande avsnitt.

I mitt tidigare exempel innehåller tabellen anställda primär och främmande nyckel definierad på den. Vi kan få en lista över befintliga nycklar med vyn INFORMATION_SCHEMA. Utför följande kod och den returnerar befintliga primära och utländska nycklar i anställdstabellen.

Vi kan se, anställdstabellen innehåller primära och utländska nycklar.

Vi kopierade alla kolumner i Employee_All från Employee-tabellen. Vi måste kontrollera primär och främmande nyckel i måltabellen nu.

Vi kan se att den inte innehåller någon nyckel i måltabellen. Det ger oss flexibilitet att definiera nycklar i måltabellen.

SQL SELECT INTO – Infoga data från flera tabeller

I tidigare exempel skapade vi en tabell med SELECT INTO-uttalandet från en enskild tabell Anställd. Vi kan också gå med i flera tabeller och använda SELECT INTO-uttalandet för att skapa en ny tabell med data också. I det här avsnittet vill vi sammanfoga flera tabeller. I följande fråga sammanfogade vi följande tabeller i AdventureWorks2017.

Kör följande fråga. Det ger resultat från flera tabeller baserat på kopplingsvillkor och nämnda kolumner.

Utför en fråga och vi följer resultatet av SQL SELECT INTO-uttalandet.

Vi vill skapa en tabell med data som returneras med ovanstående tabell. Låt oss köra SQL SELECT INTO-uttalandet.

Det skapas. och infoga data i den. Vi kan verifiera poster i denna tabell genom att välja uttalande.

Vi kan se att du kan koppla ihop flera tabeller och skapa utdata med SELECT INTO-satsen.

Vi behöver inte ta hand om att definiera datatyper för destinationstabellen. Om vi vill skapa en tabell manuellt måste vi titta på datatypen för varje kolumn och definiera datatyp därefter. Om det finns en oöverensstämmelse mellan datatyper kan du få ett felmeddelande som följande.

Fel 1: På grund av en oöverensstämmelse i datatyper

Msg 245, nivå 16, tillstånd 1 , Rad 1 – Konvertering misslyckades vid omvandling av varchar-värdet GG till datatyp int.

Fel 2: Msg 8152, nivå 16, tillstånd 30, rad 2

Sträng eller binära data skulle trunkeras.

Vi får inte dessa fel när vi infogar data med SQL SELECT INTO-satsen. Vi kan dock inte infoga data i befintliga tabeller med den här metoden.

VÄLJ IN – Ange filgrupp

I tidigare avsnitt undersökte vi att vi kan skapa en ny tabell och infoga data i den med SQL SELECT INTO-satsen från befintliga tabeller. Det skapar en tabell i standardfilegrupp endast. Vi kan inte ange en viss filgrupp förrän SQL Server 2016. I SQL Server 2017 kan vi ange en viss filgrupp där en ny tabell ska skapas. SQL Server skapar en ny tabell i den specifika Verifieringstabellgrupp. Om vi inte anger några filgrupper i SQL Server 2017 och senare, skapas en tabell i standardfilgrupp.

Obs! Vi kan inte ange filgrupper i SQL SELECT INTO för SQL Server 2016 och tidigare.

Låt oss lägga till en ny filgrupp i AdventureWorks2017-databasen. Högerklicka på databasen och gå till Filgrupper.

På den här filgruppssidan klickar du på Lägg till filgrupp och anger ett namn för filgrupp.

Klicka nu på Filer och det listar existerande databasfiler (data och loggfil), på den här sidan, lägg till en ny datafil och ange FileGroup från rullgardinsmenyn. Det borde vara FileGroup vi skapade just nu.

Vi vill skapa en SQL-tabell i INSERTFILE Filegroup. Vi har inte ställt in den här filgruppen som standardfilgrupp.

I följande fråga kan du se att vi angav filgruppens namn med ON-satsen. Det fungerar som ett vanligt SQL SELECT INTO-uttalande med skillnad i en filgrupp.

1
2
3

välj * till person. Person_temp
PÅ INSERTFIL –FILEGROUP NAMN
från person. Person

När tabellen har skapats kör du ett sp_help-kommando på den nyskapade tabellen. I följande skärmdump kan vi verifiera att tabellen finns i INSERTFILE FileGroup. Det är FileGroup vi skapade tidigare.

Vi kan också verifiera detta från tabellegenskaper. Högerklicka på en tabell i SSMS. I avsnittet Lagring kan vi se önskad FileGroup.

VÄLJ IN TILL med ett Where-tillstånd

Antag att vi vill skapa en tabell med ett SQL SELECT INTO-uttalande med få poster i det. Vi kan använda en Where-sats som liknar ett valt uttalande.I följande fråga vill vi skapa en person.person_WC-tabell för personen med efternamn är som% Duf%.

1
2
3
4

välj * in person.person_WC
PÅ INSERTFIL – Verifiera tabell Filgrupp
från person.person
där Efternamn som ”% Duf%”

Slutsats

I den här artikeln undersökte vi SQL SELECT INTO-uttalande och dess användningsscenarier. Det är ett användbart kommando att skapa en kopia av en tabell utan att specificera datatyper.

  • Författare
  • Senaste inlägg
Som MCSA-certifierad och Microsoft Certified Trainer i Gurgaon, Indien, med 13 års erfarenhet, arbetar Rajendra för en mängd stora företag med fokus på prestandaoptimering, övervakning, hög tillgänglighet och katastrofåterställningsstrategier och implementering. Han är författare till hundratals auktoritativa artiklar om SQL Server, Azure, MySQL, Linux, Power BI, Performance Tuning, AWS / Amazon RDS, Git och relaterade teknologier som hittills har visats av över 10 miljoner läsare.
Han är skaparen av en av de största gratis onlinesamlingarna av artiklar om ett enda ämne, med sin 50-delarserie om SQL Server Always On Availability Groups. Baserat på sitt bidrag till SQL Server-communityn har han fått utmärkelser med olika utmärkelser, inklusive den prestigefyllda ”Årets bästa författare” kontinuerligt 2020 och 2021 på SQLShack.
Raj är alltid intresserad av nya utmaningar så om du behöver rådgivning hjälp om alla ämnen som omfattas av hans skrifter, han kan nås på [email protected]
Visa alla inlägg av Rajendra Gupta

Senaste inlägg av Rajendra Gupta (se alla)
  • Utför mindre och större versionuppgraderingar för AWS RDS SQL Server – 29 januari 2021
  • Distribuera AWS RDS PostgreSQL-instanser – 27 januari 2021
  • Migrera dina lokala SQL-databaser till AWS RDS SQL Server med AWS DMS – 25 januari 2021

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *