SQLShack (Română)

Acest articol va acoperi instrucțiunea SQL SELECT INTO, inclusiv sintaxa, parametrii și utilizați cu mai multe tabele, grupuri de fișiere și o condiție WHERE

Inserăm în mod regulat date în tabelele SQL Server fie dintr-o aplicație, fie direct în SSMS. Putem insera date folosind instrucțiunea INSERT INTO. Pentru a face acest lucru, ar trebui să avem deja un tabel pentru a insera date în el, deoarece nu putem crea un tabel folosind Insert în declarație.

Trebuie să efectuăm următoarele sarcini folosind instrucțiunea INSERT INTO.

  • Creați o structură de tabel cu tipuri de date adecvate
  • Introduceți date în ea

Dar vestea bună este că putem face atât sarcina împreună, elegant, folosind instrucțiunea SQL SELECT INTO. Se creează o structură de tabel pentru coloanele returnate de instrucțiunea Select.

Să presupunem că dorim să actualizăm multe înregistrări într-un tabel. Putem folosi instrucțiunea SELECT INTO pentru a crea un tabel de rezervă cu structura existentă ca la tabelul sursă. Să explorăm SELECT INTO în acest articol.

Sintaxa instrucțiunii SELECT INTO

1
2
3
4

SELECT coloană1, coloană2 .. .ColumnN
INTO New_table
FROM tabele
;

Parametrii din instrucțiunea SELECT INTO

  • Lista coloanelor: trebuie să specificăm coloana pe care dorim să o preluăm și să o inserăm într-un nou tabel
  • New_table: Putem specifica numele noului tabel aici. SQL Server creează un nou tabel cu coloane menționate în lista de coloane. Nu putem înlocui un tabel existent folosind acest lucru. Numele tabelului trebuie să fie unic
  • Tabelele: conține un tabel de unde dorim să obținem înregistrări. Putem avea mai multe tabele definite aici și cu clauza de asociere adecvată
  • Condiții WHERE: putem filtra înregistrările folosind clauza Where. Este o clauză opțională

Să explorăm instrucțiunea SQL SELECT INTO folosind exemple.

Mediu:

În acest exemplu, folosim eșantion de baze de date AdventureWorks2017. Să presupunem că dorim să selectăm înregistrări din tabel și să creăm tabel nou folosind instrucțiunea SELECT INTO. Dorim coloane selectate numai în noul tabel. Haideți să rulăm o declarație selectă pe tabela Angajați cu coloanele pe care dorim să le avem.

Înainte de a executa SQL SELECT INTO declarație, putem verifica dacă tabelul Employee_Demo nu există în baza de date AdventureWorks2017 utilizând comanda sp_help.

1

sp_help „..”

În următoarea captură de ecran, putem vedea că tabelul Employee_Demo nu există în baza mea de date.

Executați următoarea interogare pentru a crea un nou tabel utilizând instrucțiunea SELECT INTO.

Primim următorul mesaj de ieșire în Azure Data Studio. Puteți observa că numărul de rânduri afectate este 10. În interogare, am selectat primele 10 înregistrări dintr-un tabel pentru angajați.

Putem accesa datele din tabela nou creată Employee_Demo și să verificăm dacă conține aceleași înregistrări ca la declarația noastră de selecție anterioară.

Nu am specificat nicio proprietate a coloanei în instrucțiunea SQL SELECT INTO. Să comparăm coloanele tabelului sursă și destinație și proprietățile acestora.

Putem rula comanda sp_help ‘tablename’ atât pe tabela Employee, cât și pe Employee_Demo. Am copiat ieșirea ambelor tabele în Excel (pentru coloanele selectate). În următoarea captură de ecran, puteți vedea că tipul de date al coloanei și proprietățile lor sunt similare.

În instrucțiunea SQL SELECT INTO anterioară , am pregătit un tabel de destinație (Employee_Demo) din câteva coloane din tabelul sursă (Employee).

Să creăm un alt tabel cu toate coloanele dintr-un tabel Employee cu următoarea interogare.

În rezultat, îl putem vedea inserat 290 de rânduri în tabelul Employee_All.

Am verificat că SELECT INTO declarația creează un nou tabel cu coloane specificate în lista de coloane. Se creează un tip de date similar și în tabelul de destinație.

Să presupunem că avem chei primare și străine în tabelul sursă. Creează o cheie primară și o cheie externă la fel de asemănătoare cu tabelul sursă? Nu, instrucțiunea SQL SELECT INTO nu creează nicio cheie în tabelul de destinație. Dacă vrem, putem defini chei pe tabelul de destinație. Să verificăm acest lucru în secțiunea următoare.

În exemplul meu anterior, tabelul Angajați conține cheie primară și externă definită pe acesta. Putem obține o listă de chei existente folosind vizualizarea INFORMATION_SCHEMA. Executați următorul cod și returnează cheile primare și externe existente în tabela Angajați.

Putem vedea, tabela Angajați conține chei primare și externe.

Am copiat toate coloanele din Employee_All din tabelul Employee. Trebuie să verificăm cheia primară și externă pe tabela de destinație acum.

Putem vedea că nu conține nicio cheie în tabelul de destinație. Ne oferă flexibilitate pentru a defini cheile de pe tabelul de destinație.

SQL SELECT INTO – Insert Data from Multiple Tables

În exemplele anterioare, am creat un tabel folosind declarația SELECT INTO dintr-o singură tabelă Angajat. Putem, de asemenea, să alăturăm mai multe tabele și să folosim instrucțiunea SELECT INTO pentru a crea și un tabel nou cu date. În această secțiune, dorim să unim mai multe tabele împreună. În următoarea interogare, am alăturat următoarele tabele împreună în AdventureWorks2017.

Executați următoarea interogare. Oferă rezultate din mai multe tabele pe baza condiției de asociere și a coloanelor menționate.

Executați o interogare și obținem rezultatul instrucțiunii SQL SELECT INTO.

Vrem să creăm un tabel cu datele returnate folosind tabelul de mai sus. Să executăm instrucțiunea SQL SELECT INTO.

Se creează. tabel și introduceți date în el. Putem verifica înregistrările din acest tabel prin instrucțiunea select.

Putem vedea că puteți uni mai multe tabele împreună și creați rezultate tabel folosind instrucțiunea SELECT INTO.

Nu trebuie să ne ocupăm de definirea tipurilor de date pentru tabelul de destinație. Dacă dorim să creăm un tabel manual, trebuie să analizăm tipul de date al fiecărei coloane și să definim tipul de date în consecință. Dacă există o nepotrivire între tipurile de date, puteți primi un mesaj de eroare precum următorul.

Eroare 1: Din cauza unei nepotriviri în tipurile de date

Msg 245, nivel 16, stare 1 , Linia 1
Conversia nu a reușit la conversia valorii varchar „GG” la tipul de date int.

Eroare 2: Msg 8152, Nivel 16, Stare 30, Linia 2

Șir sau datele binare ar fi trunchiate.

Nu primim aceste erori în timp ce inserăm date folosind instrucțiunea SQL SELECT INTO. Cu toate acestea, nu putem insera date în tabelele existente folosind această metodă.

SELECT INTO – Specify Filegroup

În secțiunile anterioare, am explorat că putem crea un nou tabel și putem insera date în acesta folosind instrucțiunea SQL SELECT INTO din tabelele existente. Se creează un tabel numai în Filegroup implicit. Nu putem specifica un anumit Filegroup până la SQL Server 2016. În SQL Server 2017, putem specifica un anumit Filegroup în care ar trebui creat un nou tabel. SQL Server creează un nou tabel în acea tabelă de verificare specială Filegroup. Dacă nu specificăm niciun grup de fișiere în SQL Server 2017 și versiuni ulterioare, se creează un tabel în grupul de fișiere implicit.

Notă: Nu putem specifica grupuri de fișiere în SQL SELECT INTO pentru SQL Server 2016 și înainte.

Permiteți-ne să adăugăm un nou Filegroup în baza de date AdventureWorks2017. Faceți clic dreapta pe baza de date și accesați Filegroups.

În această pagină Filegroup, faceți clic pe Add FileGroup și specificați un nume pentru Filegroup.

Acum, faceți clic pe Fișiere și listează fișierele existente ale bazei de date (date și fișiere jurnal), în această pagină, adăugați un nou fișier de date și specificați FileGroup din lista derulantă. Ar trebui să fie FileGroup pe care l-am creat chiar acum.

Vrem să creăm un tabel SQL în INSERTFILE Filegroup. Nu am setat acest grup de fișiere ca fișier implicit.

În următoarea interogare, puteți vedea că am specificat numele grupului de fișiere utilizând clauza ON. Funcționează similar cu o instrucțiune SQL SELECT INTO obișnuită, cu o diferență într-un grup de fișiere.

1
2
3

selectați * în person.person_temp
ON INSERTFILE –FILEGROUP NUME
de la person.person

Odată ce tabela este creată, executați o comandă sp_help pe acest tabel nou creat. În următoarea captură de ecran, putem verifica dacă tabelul este situat în INSERTFILE FileGroup. Este grupul de fișiere pe care l-am creat mai devreme.

Putem verifica acest lucru și din proprietățile tabelului. Faceți clic dreapta pe un tabel în SSMS. În secțiunea Stocare, putem vedea grupul de fișiere dorit.

SELECȚIONEAZĂ ÎN cu o condiție Where

Să presupunem că vrem să creăm un tabel cu o instrucțiune SQL SELECT INTO cu puține înregistrări în ea. Putem folosi o clauză Where similară cu o declarație select.În următoarea interogare, dorim să creăm o tabelă person.person_WC pentru persoana care are numele de familie este ca% Duf%.

1
2
3
4

selectați * în person.person_WC
PE INSERTFILE – Verificați tabelul Filegroup
de la person.person
unde Lastname ca „% Duf%”

Concluzie

În acest articol, am explorat SQL Instrucțiunea SELECT INTO și scenariile sale de utilizare. Este o comandă utilă pentru a crea o copie a unui tabel fără a specifica tipurile de date.

  • Autor
  • Postări recente
Ca certificat MCSA și Microsoft Certified Trainer în Gurgaon, India, cu 13 ani de experiență, Rajendra lucrează pentru o varietate de companii mari, concentrându-se pe optimizarea performanței, monitorizarea, disponibilitatea ridicată și strategiile și implementarea recuperării în caz de dezastru. Este autorul a sute de articole de autoritate despre SQL Server, Azure, MySQL, Linux, Power BI, Tuning de performanță, AWS / Amazon RDS, Git și tehnologii conexe care au fost vizualizate de peste 10 milioane de cititori până în prezent.
El este creatorul uneia dintre cele mai mari colecții online gratuite de articole pe un singur subiect, cu seria sa de 50 de părți despre SQL Server Always On Availability Groups. Pe baza contribuției sale la comunitatea SQL Server, a fost recunoscut cu diverse premii, inclusiv prestigiosul „Cel mai bun autor al anului” continuu în 2020 și 2021 la SQLShack.
Raj este mereu interesat de noi provocări, deci dacă aveți nevoie de consultanță ajutor cu privire la orice subiect acoperit în scrierile sale, el poate fi contactat la [email protected]
Vezi toate mesajele lui Rajendra Gupta

Ultimele postări ale lui Rajendra Gupta (vezi toate)
  • Efectuarea actualizărilor versiunilor minore și majore pentru AWS RDS SQL Server – 29 ianuarie 2021
  • Implementarea instanțelor AWS RDS PostgreSQL – 27 ianuarie 2021
  • Migrarea bazelor de date SQL locale la AWS RDS SQL Server utilizând AWS DMS – 25 ianuarie , 2021

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *