Operacja INSERT INTO ... FROM SELECT w Microsoft SQL Server to jedna z najczęściej wykorzystywanych konstrukcji języka T-SQL, umożliwiająca masowe przenoszenie, kopiowanie i transformację danych między tabelami w ramach pojedynczego zapytania. Zamiast pobierać rekordy po stronie aplikacji i wstawiać je jeden po drugim, INSERT INTO ... SELECT wykonuje całą operację po stronie silnika bazy danych — minimalnie obciążając sieć, redukując ryzyko niespójności i zapewniając wydajność nieosiągalną dla przetwarzania wiersz po wierszu. W praktyce administratorzy baz danych i deweloperzy SQL Server 2022 (a w planach także nadchodzącego SQL Server 2025) stosują tę konstrukcję do archiwizacji, migracji danych między schematami, czyszczenia tabel tymczasowych, replikacji wewnątrz bazy oraz transformacji ETL. W wersji SQL Server 2022 dostępne są dodatkowe optymalizacje — m.in. lepsza współpraca z In-Memory OLTP, ulepszony query optimizer dla zapytań SELECT z funkcjami okienkowymi oraz wsparcie dla zapytań w Azure SQL Managed Instance w trybie linku. Każda firma korzystająca z rozwiązań Microsoft może wdrożyć SQL Server 2022 Standard lub Enterprise, a zakup legalnego klucza przez autoryzowanego partnera jak KluczeSoft.pl oznacza fakturę VAT 23%, natychmiastową dostawę i polskojęzyczne wsparcie.
Czym dokładnie jest INSERT INTO ... SELECT w SQL Server?
Konstrukcja INSERT INTO ... SELECT jest instrukcją DML (Data Manipulation Language), która łączy dwie operacje w jednym przebiegu: odczyt danych z jednego lub wielu źródeł (tabel, widoków, funkcji tabelarycznych, podzapytań) i ich wstawienie do tabeli docelowej. Składnia bazowa wygląda następująco:
INSERT INTO [baza].[schemat].[tabela_docelowa] (kolumna1, kolumna2, ...)
SELECT kolumna1, kolumna2, ...
FROM tabela_zrodlowa
WHERE warunek;
Silnik SQL Server wykonuje to zapytanie jako operację zbiorczą (set-based), optymalizując plan wykonania przy użyciu statystyk indeksów obu tabel. Jeżeli tabela docelowa posiada klucz główny z IDENTITY, należy świadomie decydować, czy włączyć SET IDENTITY_INSERT ON, aby jawnie wstawić wartości, czy polegać na automatycznym generowaniu. W praktyce wersja z jawną listą kolumn — zarówno po INSERT, jak i po SELECT — jest bezpieczniejsza i rekomendowana: dokumentuje zależności, uniezależnia zapytanie od przyszłych zmian w strukturze tabel (np. dodania nowej kolumny z NOT NULL) i eliminuje ryzyko błędnego przyporządkowania wartości.
Kluczowe cechy operacji:
- Atomowość w ramach transakcji — całość wykonuje się jako pojedyncza instrukcja; w trybie
AUTOCOMMITjest niepodzielna, a w jawnej transakcji (BEGIN TRAN) objęta mechanizmem rollback. - Minimalne logowanie — w modelu odzyskiwania
SIMPLElubBULK_LOGGEDSQL Server stosuje optymalizacje ograniczające zapis do dziennika transakcji, co przyspiesza operacje masowego wstawiania. - Blokowanie na poziomie wiersza lub strony — w przeciwieństwie do
SELECT ... INTO, które zakłada blokadę Sch-M na tabeli docelowej,INSERT INTO ... SELECTużywa blokad IX na poziomie wiersza/tabeli, pozwalając na współbieżny odczyt. - Obsługa OLTP In-Memory — od SQL Server 2019 zapytanie może wskazywać tabelę docelową zoptymalizowaną pod kątem pamięci, osiągając przepustowość do kilku milionów wierszy na sekundę.
Typowe zastosowania w administrowaniu bazami danych SQL Server 2022:
- Kopiowanie archiwalnych danych do tabel historycznych z zachowaniem struktury.
- Przeładowywanie danych z tabel stagingowych do produkcyjnych po walidacji.
- Tworzenie migawek analitycznych na potrzeby raportów Power BI podłączonych do SQL Server.
- Przenoszenie wyliczonych agregacji (
GROUP BY,SUM,COUNT) do tabel podsumowujących.
INSERT INTO ... SELECT vs SELECT INTO — porównanie obu mechanizmów
Wielu początkujących administratorów SQL Server myli INSERT INTO ... SELECT z SELECT ... INTO. Choć obie konstrukcje służą do przenoszenia danych, różnią się fundamentalnie pod względem mechanizmu działania, wymagań dotyczących tabeli docelowej i dopuszczalnych scenariuszy.
| Kryterium | INSERT INTO ... SELECT | SELECT ... INTO |
|---|---|---|
| Tablica docelowa | Musi istnieć przed wykonaniem zapytania | Tworzona automatycznie na podstawie wyniku SELECT |
| Struktura docelowa | Wymaga zgodności typów i liczby kolumn z SELECT | Dziedziczy typy danych i kolumny bezpośrednio z SELECT |
| Indeksy, ograniczenia, klucze | Zachowywane — tabela już je posiada | Nie są tworzone (oprócz NOT NULL z kolumn źródłowych) |
| Blokady | IX na wierszu/stronie | Sch-M (modyfikacja schematu) — blokuje dostęp do tabeli |
| Użycie w pętli | Tak — wielokrotne wstawianie do istniejącej tabeli | Nie — druga iteracja zakończy się błędem "tabela już istnieje" |
| Uprawnienia | INSERT na tabeli docelowej | CREATE TABLE w schemacie docelowym |
| Wydajność przy dużych zbiorach | Wyższa dla istniejącej infrastruktury indeksowej | Szybsze dla jednorazowego tworzenia nowej tabeli |
Kiedy wybrać INSERT INTO ... SELECT:
- Tabela docelowa jest już zdefiniowana wraz z indeksami klastrowymi, nieklastrowymi, ograniczeniami
FOREIGN KEYiCHECK. - Operacja będzie wykonywana cyklicznie (co noc, co godzinę) — potrzebujesz stale istniejącego kontenera.
- Wymagana jest pełna zgodność typów: możesz jawnie rzutować kolumny (
CAST,CONVERT,TRY_CAST) w klauzuli SELECT, zanim trafią do tabeli o ściśle określonych typach. - Pracujesz w kontekście istniejących uprawnień — użytkownik ma prawa INSERT, ale nie CREATE TABLE.
Kiedy wybrać SELECT ... INTO:
- Tworzysz jednorazową migawkę danych do analizy ad-hoc.
- Potrzebujesz szybko skopiować strukturę i dane do nowej tabeli tymczasowej.
- Nie masz jeszcze zdefiniowanego schematu docelowego —
SELECT INTOtworzy go automatycznie.
W środowiskach produkcyjnych na SQL Server 2022 Standard dominuje INSERT INTO ... SELECT, ponieważ operacje powtarzalne (ładowanie hurtowni danych, archiwizacja partycji) wymagają stabilnej tabeli docelowej z pełnym zestawem indeksów.
Praktyczne warianty składni INSERT INTO ... SELECT
Elastyczność INSERT INTO ... SELECT ujawnia się w kilku sprawdzonych wariantach, które pokrywają praktycznie każdy scenariusz przenoszenia danych w SQL Server. Poniżej omówienie każdego z nich z rzeczywistymi przykładami.
Wariant podstawowy — kopiowanie wszystkich kolumn między identycznymi tabelami
Gdy struktury obu tabel są identyczne (np. tabela Zamowienia i Zamowienia_Archiwum):
INSERT INTO dbo.Zamowienia_Archiwum
SELECT * FROM dbo.Zamowienia
WHERE DataZamowienia < '2023-01-01';
Ten wariant działa wyłącznie gdy liczba i kolejność kolumn są zgodne. W praktyce lepiej jawnie wymienić kolumny, aby uniknąć błędów przy zmianach schematu w przyszłości.
Wariant z transformacją danych
Dane źródłowe wymagają przekształcenia przed wstawieniem — np. zmiany formatu daty, konwersji jednostek lub oczyszczenia tekstu:
INSERT INTO dbo.Faktury (Numer, KwotaNetto, KwotaVAT, DataWystawienia)
SELECT
FAKTURA_ID,
KWOTA_BRUTTO / 1.23,
KWOTA_BRUTTO - (KWOTA_BRUTTO / 1.23),
TRY_CAST(DATA_STRING AS DATE)
FROM staging.dbo.FakturyImport
WHERE TRY_CAST(DATA_STRING AS DATE) IS NOT NULL;
Funkcja TRY_CAST (SQL Server 2012+) zwraca NULL zamiast błędu przy nieudanej konwersji — kluczowe przy importach danych z plików CSV.
Wariant z JOIN — wzbogacanie danymi z innych tabel
Łączenie danych z wielu źródeł podczas wstawiania:
INSERT INTO dbo.ZamowieniaProdukty (ZamowienieID, ProduktID, Ilosc, CenaJednostkowa)
SELECT
z.ZamowienieID,
p.ProduktID,
zp.Ilosc,
p.CenaAktualna
FROM staging.dbo.PozycjeImport zp
INNER JOIN dbo.Zamowienia z ON zp.ZamowienieKlucz = z.KluczZewnetrzny
INNER JOIN dbo.Produkty p ON zp.KodEAN = p.KodEAN;
Ten wariant jest często wykorzystywany w procesach ETL, gdzie dane z systemów zewnętrznych wymagają mapowania na klucze główne obowiązujące w bazie docelowej.
Wariant z GROUP BY i agregacjami
Wstawianie zagregowanych wyników do tabel raportowych:
INSERT INTO dbo.SprzedazDzienna (Data, KategoriaID, LiczbaZamowien, Przychod)
SELECT
CAST(DataZamowienia AS DATE),
KategoriaID,
COUNT(*),
SUM(Kwota)
FROM dbo.Zamowienia
WHERE DataZamowienia >= DATEADD(DAY, -1, GETDATE())
GROUP BY CAST(DataZamowienia AS DATE), KategoriaID;
Wariant z Common Table Expression (CTE)
CTE ułatwia czytelność przy złożonych transformacjach i pozwala na wielokrotne odwołanie do tego samego zbioru tymczasowego w jednym zapytaniu:
WITH OczyszczoneDane AS (
SELECT
KlientID,
LTRIM(RTRIM(UPPER(Nazwisko))) AS Nazwisko,
TRY_PARSE(KwotaString AS DECIMAL(18,2) USING 'pl-PL') AS Kwota
FROM staging.dbo.DaneBrudne
WHERE TRY_PARSE(KwotaString AS DECIMAL(18,2) USING 'pl-PL') IS NOT NULL
)
INSERT INTO dbo.Platnosci (KlientID, Nazwisko, Kwota)
SELECT KlientID, Nazwisko, Kwota
FROM OczyszczoneDane;
Wariant z rankingiem i numerowaniem wierszy
Okno funkcyjne ROW_NUMBER() pozwala odfiltrować duplikaty przed wstawieniem:
INSERT INTO dbo.ProduktyUnikalne (EAN, Nazwa, Cena)
SELECT EAN, Nazwa, Cena
FROM (
SELECT EAN, Nazwa, Cena,
ROW_NUMBER() OVER (PARTITION BY EAN ORDER BY DataAktualizacji DESC) AS rn
FROM staging.dbo.ProduktyImport
) ranked
WHERE rn = 1;
INSERT INTO ... SELECT a wydajność — indeksy, blokady i optymalizacje w SQL Server 2022
Wstawianie setek tysięcy czy milionów wierszy wymaga świadomego zarządzania wydajnością. SQL Server 2022 oferuje szereg mechanizmów optymalizacyjnych, które — właściwie wykorzystane — skracają czas operacji z godzin do minut.
Wpływ indeksów na INSERT. Indeksy na tabeli docelowej spowalniają każdą operację wstawiania, ponieważ silnik musi równocześnie aktualizować struktury indeksowe. Dla masowych wstawień sprawdzoną techniką jest czasowe wyłączenie indeksów nieklastrowych:
ALTER INDEX IX_Zamowienia_Kategoria ON dbo.Zamowienia DISABLE;
-- ... wykonaj INSERT INTO ... SELECT ...
ALTER INDEX IX_Zamowienia_Kategoria ON dbo.Zamowienia REBUILD;
Należy jednak pamiętać, że wyłączony indeks nie obsługuje zapytań — tabela pozostaje dostępna wyłącznie przez indeks klastrowy lub stertę. Alternatywą jest DROP INDEX przed operacją i CREATE INDEX po niej, co w SQL Server 2022 Enterprise może odbywać się równolegle (MAXDOP).
Minimalne logowanie. W modelu odzyskiwania SIMPLE lub BULK_LOGGED SQL Server automatycznie stosuje minimalne rejestrowanie dziennika transakcji dla operacji INSERT INTO ... SELECT, o ile spełnione są warunki: tabela docelowa nie jest replikowana, nie używa Change Data Capture (CDC) ani Change Tracking, a TABLOCK jest jawnie wskazane lub wynegocjowane przez optymalizator. Aby wymusić blokadę na poziomie tabeli (korzystną przy braku współbieżności):
INSERT INTO dbo.DuzaTabela WITH (TABLOCK)
SELECT * FROM staging.dbo.DuzyImport;
Partycyjne przełączanie (partition switching). W SQL Server 2022 w edycji Enterprise (oraz Developer) możliwe jest przełączanie partycji między tabelami — operacja metadanych, która przenosi miliony wierszy w milisekundach bez fizycznego kopiowania danych. Mechanizm ten jest szeroko stosowany w hurtowniach danych: dane ładuje się do tabeli stagingowej, indeksuje, a następnie przełącza jako nową partycję tabeli głównej.
Równoległość. SQL Server 2022 generuje plany równoległe dla INSERT INTO ... SELECT, gdy szacowany koszt operacji przekracza próg cost threshold for parallelism (domyślnie 5) i liczba procesorów na to pozwala. Równoległość może być ograniczona przez hint MAXDOP lub na poziomie całej bazy danych.
Tabelaryczny parametr (Table-Valued Parameter). Dla średnich zbiorów (do kilkudziesięciu tysięcy wierszy) rozważ przekazanie danych jako TVP z aplikacji .NET — eliminuje to staging w tabeli tymczasowej i wykonuje atomowe INSERT z poziomu procedury składowanej.
Obsługa błędów i integralność danych
Operacje INSERT INTO ... SELECT mogą zakończyć się błędem przy pierwszym napotkanym problemie — naruszeniu klucza głównego, ograniczenia FOREIGN KEY, niezgodności typów lub przekroczeniu długości kolumny. Cała operacja jest wtedy wycofywana, a dane, które zdążyły zostać wstawione przed błędem, znikają (w ramach niejawnej transakcji AUTOCOMMIT).
Aby tego uniknąć, stosuje się kilka sprawdzonych strategii:
TRY...CATCH z jawną transakcją:
BEGIN TRY
BEGIN TRAN;
INSERT INTO dbo.TabelaDocelowa (ID, Nazwa)
SELECT ID, Nazwa FROM staging.dbo.TabelaZrodlowa;
COMMIT TRAN;
END TRY
BEGIN CATCH
ROLLBACK TRAN;
THROW; -- ponownie zgłasza błąd z oryginalną treścią
END CATCH;
Weryfikacja WHERE NOT EXISTS przed wstawieniem — zapobiega duplikatom klucza głównego:
INSERT INTO dbo.Produkty (KodEAN, Nazwa)
SELECT s.KodEAN, s.Nazwa
FROM staging.dbo.NoweProdukty s
WHERE NOT EXISTS (
SELECT 1 FROM dbo.Produkty p WHERE p.KodEAN = s.KodEAN
);
MERGE jako alternatywa. Od SQL Server 2008 dostępna jest instrukcja MERGE, która w jednym przebiegu wykonuje INSERT, UPDATE lub DELETE w zależności od dopasowania rekordu. Mimo elastyczności, MERGE bywa krytykowany za subtelne problemy z izolacją i wydajnością — w SQL Server 2022 zespół produktowy zalecił ostrożność i testowanie przy dużym obciążeniu współbieżnym.
Walidacja typów przed wstawieniem. Do sprawdzenia, które wiersze nie przejdą konwersji, służy TRY_CAST/TRY_CONVERT z dodatkową kolumną diagnostyczną:
SELECT kolumna1, kolumna2,
CASE WHEN TRY_CAST(DataString AS DATE) IS NULL THEN 1 ELSE 0 END AS BladKonwersji
FROM staging.dbo.DaneImport;
Dzięki temu można wyizolować problematyczne rekordy przed właściwą operacją INSERT.
INSERT INTO ... SELECT w kontekście Azure SQL i chmury hybrydowej
W 2026 roku coraz więcej firm łączy lokalną instalację SQL Server 2022 z chmurą Azure, tworząc architektury hybrydowe. Mechanizm INSERT INTO ... SELECT zyskuje tu dodatkowe zastosowania:
Azure SQL Managed Instance Link. Funkcja dostępna od SQL Server 2022 pozwala na niemal natychmiastowe replikowanie danych między instancją lokalną a chmurą. W praktyce oznacza to, że INSERT INTO ... SELECT wykonany na lokalnym serwerze może być automatycznie odzwierciedlony w Managed Instance — bez dodatkowego kodu ETL.
External tables i PolyBase. SQL Server 2022 wspiera PolyBase z łącznikami do Azure Blob Storage, Data Lake i Hadoop. Możliwe jest wykonanie:
INSERT INTO dbo.LokalnaTabela
SELECT * FROM [ExternalTableNaAzure];
To pozwala ładować do lokalnej bazy dane przechowywane w chmurze, z pełną mocą obliczeniową lokalnego serwera.
Elastic Query. W architekturach cross-database zapytania typu:
INSERT INTO dbo.Lokalna
SELECT * FROM [AzureDB].[dbo].[Zewnetrzna];
wymagają ustanowienia połączenia między bazami (Elastic Query) i odpowiednich poświadczeń na poziomie SQL. To rozwiązanie popularne w migracjach stopniowych, gdzie część danych pozostaje w chmurze, a część wraca do lokalnego data center.
Typowe błędy i ich rozwiązania
Poniższe problemy pojawiają się regularnie podczas pracy z INSERT INTO ... SELECT w SQL Server. Każdy z nich ma sprawdzoną przyczynę i rozwiązanie.
Błąd: "String or binary data would be truncated."
Przyczyna: dane źródłowe są dłuższe niż definicja kolumny docelowej (np. NVARCHAR(50) vs tekst 60-znakowy). SQL Server 2019+ (poziom zgodności 150) podaje, która kolumna spowodowała błąd. Rozwiązanie: zwiększyć długość kolumny docelowej lub przyciąć dane (LEFT(kolumna, 50)).
Błąd: "Violation of PRIMARY KEY constraint."
Przyczyna: wstawiany rekord ma wartość klucza głównego, która już istnieje. Rozwiązanie: dodać WHERE NOT EXISTS lub użyć MERGE z klauzulą WHEN NOT MATCHED.
Błąd: "The INSERT statement conflicted with the FOREIGN KEY constraint."
Przyczyna: wiersz źródłowy odwołuje się do klucza obcego, który nie istnieje w tabeli nadrzędnej. Rozwiązanie: dodać INNER JOIN z tabelą nadrzędną, aby odfiltrować osierocone rekordy, lub najpierw załadować brakujące wpisy nadrzędne.
Błąd: "The column was specified multiple times for column_name."
Przyczyna: to samo źródło kolumny pojawia się więcej niż raz w klauzuli SELECT (częste przy SELECT * z JOIN). Rozwiązanie: jawnie wymienić kolumny, unikając duplikacji aliasów.
Błąd: "Cannot insert explicit value for identity column when IDENTITY_INSERT is set to OFF."
Przyczyna: próba wstawienia wartości do kolumny IDENTITY bez włączenia SET IDENTITY_INSERT tabela ON. Rozwiązanie: albo pominąć kolumnę IDENTITY w INSERT, albo jawnie włączyć tę opcję — pamiętając, że tylko jedna tabela w sesji może mieć ją aktywną w danej chwili.
Problem wydajności przy równoległych INSERT-ach na tej samej tabeli.
Przyczyna: blokowanie stron (page latch) przy wysokiej współbieżności na tabelach bez indeksu klastrowego (heap). Rozwiązanie: rozważyć dodanie indeksu klastrowego (najlepiej na kluczu monotonicznie rosnącym jak IDENTITY lub data), aby rozproszyć punkty wstawiania, lub użyć In-Memory OLTP przy ekstremalnych wymaganiach.
Częste pytania
Czy INSERT INTO ... SELECT blokuje tabelę źródłową?
Nie w trybie domyślnym. SQL Server zakłada blokadę współdzieloną (S) na wierszach odczytywanych z tabeli źródłowej, co pozwala innym sesjom na równoległy odczyt, ale blokuje modyfikacje tych konkretnych wierszy. Przy użyciu WITH (NOLOCK) lub poziomu izolacji READ UNCOMMITTED można odczytać dane bez blokad, ryzykując brudne odczyty. Z kolei WITH (TABLOCK) na tabeli źródłowej zakłada blokadę wyłączną, blokując wszelki dostęp — użyteczne przy wymuszeniu minimalnego logowania, ale destrukcyjne dla współbieżności.
Jak wstawić tylko TOP N wierszy z SELECT?
Użyj INSERT INTO ... SELECT TOP (N) ... ORDER BY .... SQL Server 2022 optymalizuje takie zapytanie, zatrzymując skanowanie po osiągnięciu N wierszy (o ile plan wykorzystuje indeks zgodny z ORDER BY).
Czy można użyć INSERT INTO ... SELECT z tabelą tymczasową?
Tak. Zarówno lokalne tabele tymczasowe (#temp), jak i globalne (##temp) oraz zmienne tabelaryczne (@table) mogą być źródłem i celem operacji. Lokalna tabela tymczasowa jest dostępna tylko w sesji, która ją utworzyła — idealna do stagingu przed operacją INSERT.
Czy INSERT INTO ... SELECT działa w procedurach składowanych?
Tak, to jedno z najczęstszych zastosowań. Procedura składowana może parametryzować warunek WHERE, używając zmiennych przekazanych z aplikacji, co czyni ją centralnym elementem logiki ETL w bazie.
Jak zachowuje się IDENTITY podczas INSERT INTO ... SELECT?
Kolumna IDENTITY generuje automatycznie kolejną wartość dla każdego wstawianego wiersza. Jeśli potrzebujesz zachować oryginalne wartości, włącz SET IDENTITY_INSERT tabela ON i jawnie wstaw wartości do kolumny IDENTITY. Pamiętaj, by po operacji wyłączyć tę opcję: SET IDENTITY_INSERT tabela OFF.
Czy mogę użyć INSERT INTO ... SELECT do kopiowania między bazami na tym samym serwerze?
Tak, pod warunkiem że obie bazy znajdują się na tej samej instancji SQL Server. Wystarczy w pełni kwalifikować nazwy: INSERT INTO BazaA.dbo.Tabela SELECT * FROM BazaB.dbo.Tabela. Dla baz na różnych instancjach potrzebujesz Linked Server lub zapytań rozproszonych (OPENROWSET, OPENQUERY).
Czy INSERT INTO ... SELECT obsługuje kolumny XML, JSON i przestrzenne?
Tak. SQL Server 2022 w pełni wspiera typy XML, JSON (przechowywany jako NVARCHAR) oraz GEOGRAPHY i GEOMETRY. Kolumny te są przenoszone bezstratnie, a na etapie SELECT możesz je transformować za pomocą funkcji nodes(), OPENJSON czy STAsText().
Czym różni się INSERT INTO ... SELECT od BULK INSERT?
BULK INSERT ładuje dane z pliku zewnętrznego (CSV, TXT) z wykorzystaniem optymalizacji stronicowania, osiągając wyższą przepustowość przy ogromnych zbiorach. INSERT INTO ... SELECT działa wyłącznie na danych już znajdujących się w bazie. W procesach ETL typowo najpierw ładuje się pliki przez BULK INSERT do tabeli stagingowej, a następnie transformuje i przenosi przez INSERT INTO ... SELECT do tabel docelowych.
Jaka jest maksymalna liczba wierszy dla INSERT INTO ... SELECT?
Nie ma twardego limitu. Operacja podlega wyłącznie dostępności miejsca w plikach danych i dzienniku transakcji, a także limitom czasowym zapytania. Przy setkach milionów wierszy zaleca się przetwarzanie w partiach — np. po 1 000 000 wierszy w pętli z WAITFOR DELAY, co zmniejsza obciążenie dziennika transakcji i pozwala na stopniowe zatwierdzanie.
Czy operacja INSERT INTO ... SELECT jest rejestrowana w dzienniku transakcji?
Tak, ale zakres rejestrowania zależy od modelu odzyskiwania bazy danych. W FULL każda operacja jest w pełni logowana. W SIMPLE i BULK_LOGGED SQL Server stosuje minimalne logowanie dla operacji masowych, rejestrując tylko alokacje stron, nie zaś każdy wiersz z osobna — co redukuje rozmiar dziennika nawet o 90%.
Prawidłowo skonfigurowany SQL Server 2022 z legalną licencją to fundament każdej poważnej operacji INSERT INTO ... SELECT. KluczeSoft.pl oferuje klucze do SQL Server 2022 Standard i Enterprise z fakturą VAT 23% i dostawą w ciągu 1-3 minut — sprawdź dostępne edycje SQL Server i wybierz licencję dopasowaną do skali Twojej firmy.
Sprawdź też
- Sql server management studio — kompletny przewodnik 2026
- Ms SQL Server Express — kompletny przewodnik 2026
- SQL Server — kompletny przewodnik 2026
- Sql Server Express — kompletny przewodnik 2026
Potrzebujesz licencji? Microsoft SQL Server — sprawdź ofertę KluczeSoft.pl — legalne klucze, faktura VAT, dostawa e-mail.
<!-- INLINE-LINKS-V1 -->