SQLShack (Polski)

W tym artykule omówiono instrukcję SQL SELECT INTO, w tym składnię, parametry i używać z wieloma tabelami, grupami plików i warunkiem WHERE

Regularnie wstawiamy dane do tabel programu SQL Server z poziomu aplikacji lub bezpośrednio w programie SSMS. Dane możemy wstawiać za pomocą instrukcji INSERT INTO. Aby to zrobić, powinniśmy mieć tabelę już na miejscu, aby wstawić do niej dane, ponieważ nie możemy utworzyć tabeli za pomocą funkcji Wstaw do instrukcji.

Musimy wykonać następujące zadania za pomocą instrukcji INSERT INTO.

  • Utwórz strukturę tabeli z odpowiednimi typami danych
  • Wstaw do niej dane

Ale dobrą wiadomością jest to, że możemy wykonać oba zadania razem, elegancko, używając instrukcji SQL SELECT INTO. Tworzy strukturę tabeli dla kolumn zwracanych przez instrukcję Select.

Załóżmy, że chcemy zaktualizować wiele rekordów w tabeli. Możemy użyć instrukcji SELECT INTO do utworzenia tabeli kopii zapasowej z istniejącą strukturą tabeli źródłowej. Przyjrzyjmy się instrukcji SELECT INTO w tym artykule.

Składnia instrukcji SELECT INTO

1
2
3
4

SELECT kolumna1, kolumna2 .. .ColumnN
INTO New_table
Z tabel
;

Parametry w instrukcji SELECT INTO

  • Lista kolumn: musimy określić kolumnę, którą chcemy pobrać i wstawić do nowej tabeli.
  • New_table: Tutaj możemy określić nową nazwę tabeli. SQL Server tworzy nową tabelę z kolumnami wymienionymi na liście kolumn. Nie możemy zastąpić istniejącej tabeli przy użyciu tego. Nazwa tabeli powinna być niepowtarzalna.
  • Tabele: zawiera tabelę, z której chcemy pobrać rekordy. Możemy tutaj zdefiniować wiele tabel z odpowiednią klauzulą Join.
  • Warunki WHERE: Możemy filtrować rekordy za pomocą klauzuli Where. Jest to klauzula opcjonalna.

Przeanalizujmy instrukcję SQL SELECT INTO na przykładach.

Środowisko:

W tym przykładzie używamy przykładowa baza danych AdventureWorks2017. Załóżmy, że chcemy wybrać rekordy z tabeli i utworzymy nową tabelę za pomocą instrukcji SELECT INTO. Chcemy, aby wybrane kolumny znajdowały się tylko w nowej tabeli. Uruchommy instrukcję select w tabeli Employee z kolumnami, które chcemy mieć.

Zanim wykonamy polecenie SQL SELECT INTO oświadczenie, możemy sprawdzić, czy tabela Employee_Demo nie istnieje w bazie danych AdventureWorks2017 za pomocą polecenia sp_help.

1

sp_help „..”

Na poniższym zrzucie ekranu widzimy, że tabela Employee_Demo nie istnieje w mojej bazie danych.

Wykonaj następujące zapytanie, aby utworzyć nową tabelę za pomocą instrukcji SELECT INTO.

Otrzymujemy następujący komunikat wyjściowy w Azure Data Studio. Możesz zauważyć, że liczba wierszy, których to dotyczy, wynosi 10. W zapytaniu wybraliśmy 10 najlepszych rekordów z tabeli Employee.

Możemy uzyskać dostęp do danych z nowo utworzonej tabeli Employee_Demo i sprawdzić, czy zawiera ona te same rekordy, co w naszej wcześniejszej instrukcji select.

Nie określiliśmy żadnych właściwości kolumny w instrukcji SQL SELECT INTO. Porównajmy kolumny tabeli źródłowej i docelowej oraz ich właściwości.

Możemy uruchomić polecenie sp_help „tablename” zarówno na tabeli Employee, jak i Employee_Demo. Skopiowałem dane wyjściowe obu tabel w programie Excel (dla wybranych kolumn). Na poniższym zrzucie ekranu widać, że typ danych kolumny i ich właściwości są podobne.

W poprzedniej instrukcji SQL SELECT INTO , przygotowaliśmy tabelę docelową (Employee_Demo) z kilku kolumn w tabeli źródłowej (Employee).

Utwórzmy kolejną tabelę ze wszystkimi kolumnami w tabeli Employee za pomocą następującego zapytania.

W wynikach widzimy wstawienie 290 wierszy w tabeli Employee_All.

Sprawdziliśmy, że polecenie SELECT INTO instrukcja tworzy nową tabelę z kolumnami określonymi na liście kolumn. Tworzy podobny typ danych również w tabeli docelowej.

Załóżmy, że w tabeli źródłowej mamy klucz podstawowy i obcy. Czy tworzy klucz podstawowy i klucz obcy, podobnie jak tabela źródłowa? Nie, instrukcja SQL SELECT INTO nie tworzy żadnych kluczy w tabeli docelowej. Jeśli chcemy, możemy zdefiniować klucze w tabeli docelowej. Zweryfikujmy to w następnej sekcji.

W moim wcześniejszym przykładzie tabela Employee zawiera zdefiniowany w niej klucz podstawowy i klucz obcy. Możemy uzyskać listę istniejących kluczy za pomocą widoku INFORMATION_SCHEMA. Wykonaj następujący kod, a zwróci on istniejące klucze podstawowe i obce w tabeli Employee.

Widzimy, że tabela Employee zawiera klucze podstawowe i obce.

Skopiowaliśmy wszystkie kolumny z tabeli Employee_All z tabeli Employee. Musimy teraz sprawdzić klucz podstawowy i obcy w tabeli docelowej.

Widzimy, że nie zawiera on żadnego klucza w tabeli docelowej. Daje nam elastyczność definiowania kluczy w tabeli docelowej.

SQL SELECT INTO – wstaw dane z wielu tabel

W poprzednich przykładach utworzyliśmy tabelę używając instrukcji SELECT INTO z pojedynczej tabeli Employee. Możemy również połączyć wiele tabel i użyć instrukcji SELECT INTO, aby utworzyć nową tabelę również z danymi. W tej sekcji chcemy połączyć wiele stołów razem. W poniższym zapytaniu połączyliśmy ze sobą poniższe tabele w AdventureWorks2017.

Wykonaj następujące zapytanie. Daje wyniki z wielu tabel na podstawie warunku łączenia i wymienionych kolumn.

Wykonaj zapytanie, a otrzymamy wynik instrukcji SQL SELECT INTO.

Chcemy utworzyć tabelę z danymi zwróconymi przy użyciu powyższej tabeli. Wykonajmy instrukcję SQL SELECT INTO.

Tworzy. tabeli i wstaw do niej dane. Możemy zweryfikować rekordy w tej tabeli za pomocą instrukcji select.

Widzimy, że możesz połączyć wiele tabel razem i stworzyć wynik table za pomocą instrukcji SELECT INTO.

Nie musimy zajmować się definiowaniem typów danych dla tabeli docelowej. Jeśli chcemy ręcznie stworzyć tabelę, musimy przyjrzeć się typowi danych każdej kolumny i odpowiednio zdefiniować typ danych. W przypadku niezgodności między typami danych można otrzymać komunikat o błędzie podobny do następującego.

Błąd 1: z powodu niezgodności typów danych

Msg 245, poziom 16, stan 1 , Wiersz 1
Konwersja nie powiodła się podczas konwersji wartości varchar „GG” na typ danych int.

Błąd 2: Msg 8152, poziom 16, stan 30, wiersz 2

Ciąg lub dane binarne zostałyby obcięte.

Nie otrzymujemy tych błędów podczas wstawiania danych za pomocą instrukcji SQL SELECT INTO. Nie możemy jednak wstawiać danych do istniejących tabel przy użyciu tej metody.

SELECT INTO – Specify Filegroup

W poprzednich sekcjach sprawdziliśmy, że możemy utworzyć nową tabelę i wstawić do niej dane używając instrukcji SQL SELECT INTO z istniejących tabel. Tworzy tabelę tylko w domyślnej grupie plików. Nie możemy określić konkretnej grupy plików do SQL Server 2016. W SQL Server 2017 możemy określić konkretną grupę plików, w której ma zostać utworzona nowa tabela. SQL Server tworzy nową tabelę w tej konkretnej grupie plików weryfikacji tabeli. Jeśli nie określimy żadnych grup plików w SQL Server 2017 i nowszych, tworzy tabelę w domyślnej grupie plików.

Uwaga: Nie możemy określić grup plików w SQL SELECT INTO dla SQL Server 2016 i starszych.

Dodajmy nową grupę plików w bazie danych AdventureWorks2017. Kliknij prawym przyciskiem myszy bazę danych i przejdź do grup plików.

Na tej stronie grupy plików kliknij opcję Dodaj grupę plików i określ nazwę grupy plików.

Teraz kliknij Pliki i wyświetla listę istniejących plików bazy danych (plik danych i dziennika), na tej stronie dodaj nowy plik danych i określ FileGroup z listy rozwijanej. Powinna to być grupa plików, którą właśnie utworzyliśmy.

Chcemy utworzyć tabelę SQL w grupie plików INSERTFILE. Nie ustawiliśmy tej grupy plików jako domyślnej grupy plików.

W poniższym zapytaniu widać, że określiliśmy nazwę grupy plików za pomocą klauzuli ON. Działa podobnie do zwykłej instrukcji SQL SELECT INTO z różnicą w grupie plików.

1
2
3

select * into person.person_temp
ON INSERTFILE –FILEGROUP NAZWA
od person.person

Po utworzeniu tabeli wykonaj polecenie sp_help na tej nowo utworzonej tabeli. Na poniższym zrzucie ekranu możemy sprawdzić, czy tabela znajduje się w grupie INSERTFILE FileGroup. Jest to grupa plików, którą utworzyliśmy wcześniej.

Możemy to również zweryfikować na podstawie właściwości tabeli. Kliknij prawym przyciskiem myszy tabelę w programie SSMS. W sekcji Pamięć możemy zobaczyć żądaną grupę plików.

SELECT INTO z warunkiem Where

Załóżmy, że chcemy utworzyć tabelę z instrukcją SQL SELECT INTO z kilkoma rekordami. Możemy użyć klauzuli Where podobnej do instrukcji select.W poniższym zapytaniu chcemy utworzyć tabelę person.person_WC dla osoby o nazwisku% Duf%.

1
2
3
4

wybierz * into person.person_WC
ON INSERTFILE – Zweryfikuj grupę plików tabeli
od person.person
, gdzie nazwisko takie jak „% Duf%”

Podsumowanie

W tym artykule omówiliśmy SQL Instrukcja SELECT INTO i jej scenariusze użycia. Jest to przydatne polecenie do tworzenia kopii tabeli bez określania typów danych.

  • Autor
  • Najnowsze posty
Jako certyfikat MCSA i Microsoft Certified Trainer w Gurgaon w Indiach, z 13-letnim doświadczeniem, Rajendra pracuje dla różnych dużych firm, koncentrując się na optymalizacji wydajności, monitorowaniu, wysokiej dostępności oraz strategiach i wdrażaniu odzyskiwania po awarii. Jest autorem setek autorytatywnych artykułów na temat SQL Server, Azure, MySQL, Linux, Power BI, Performance Tuning, AWS / Amazon RDS, Git i powiązanych technologii, które do tej pory obejrzało ponad 10 milionów czytelników.
Jest twórcą jednej z największych bezpłatnych kolekcji artykułów online na jeden temat, w tym 50-częściowej serii na temat grup dostępności SQL Server Always On. Dzięki swojemu wkładowi w społeczność SQL Server, został wyróżniony różnymi nagrodami, w tym prestiżową nagrodą „Najlepszy autor roku” nieprzerwanie w 2020 i 2021 roku w SQLShack.
Raj jest zawsze zainteresowany nowymi wyzwaniami, więc jeśli potrzebujesz konsultacji pomoc na każdy temat poruszony w jego pismach, można się z nim skontaktować pod adresem [email protected]
Wyświetl wszystkie posty Rajendry Gupty

Najnowsze posty Rajendry Gupty (zobacz wszystkie)
  • Wykonywanie drobnych i głównych aktualizacji wersji AWS RDS SQL Server – 29 stycznia 2021
  • Wdrażanie wystąpień AWS RDS PostgreSQL – 27 stycznia 2021
  • Migracja lokalnych baz danych SQL do AWS RDS SQL Server przy użyciu AWS DMS – 25 stycznia , 2021

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *