Blog JSystems - uwalniamy wiedzę!

Szukaj
Testy SQL i code review: zrzuty z ChatGPT i SQL Server Management Studio z części 7 przewodnika AI w SQL
Część 7 przewodnika AI w SQL. Na obrazie trzy prawdziwe zrzuty z tej części.

W skrócieAI pisze testy SQL z danymi testowymi i oczekiwanym wynikiem oraz robi przegląd kodu jak doświadczony DBA, ale testy trzeba sprawdzić celowo zepsutą funkcją. Pokazujemy 9 testów od AI, test mutacyjny, procedurę podatną na SQL injection, jej poprawioną wersję i listę kontrolną 25 punktów.

To część 7 z 8 przewodnika AI w SQL. Wszystkie przykłady powstały na bazie DemoShop w SQL Server 2022: fikcyjnym sklepie internetowym z 2,4 mln zamówień. Polecenia wpisujemy do ChatGPT, ale te same możesz podać Microsoft Copilotowi, Claude albo Gemini. Przy skryptach korzystających z mechanizmów serwera w małej szarej ramce znajdziesz ich odpowiedniki dla Oracle i PostgreSQL.

Pliki do tej części

Skrypt bazy uruchamiasz w SSMS na serwerze SQL Server 2019 lub nowszym. Tworzy bazę DemoShop, na której powstały wszystkie przykłady.

Generowanie testów SQL z AI: dane testowe i oczekiwany wynik

Testy zapytań i funkcji SQL pisze się rzadko, bo są żmudne: trzeba przygotować dane z zachowaniem kluczy obcych, wyliczyć oczekiwany wynik, porównać go z rzeczywistym i posprzątać. To dokładnie ten rodzaj pracy, który AI wykonuje w minutę. Nasz rachunek z tej sekcji brzmi tak: AI napisało ponad 1800 linii testów, my poświęciliśmy kwadrans na sprawdzenie, czy te testy mają sens. Ten kwadrans okazał się konieczny.

Testujemy funkcję, która liczy przychód z opłaconych zamówień każdego klienta w podanym miesiącu. W sekcji o błędach logicznych pokazaliśmy, że zamówienie z dwiema płatnościami potrafi po cichu podwoić przychód, więc ta funkcja jest dobrym kandydatem do zabezpieczenia testami.

/* Funkcja pod testami: przychód z opłaconych zamówień każdego klienta w podanym miesiącu.
   Zamówienie jest opłacone, gdy ma co najmniej jedną płatność SUCCESS.
   Klienci bez opłaconych zamówień w miesiącu też są w wyniku (0 zamówień, 0 zł). */
CREATE OR ALTER FUNCTION dbo.fn_PaidRevenueByCustomer (@MonthStart date)
RETURNS TABLE
AS
RETURN
SELECT c.CustomerID,
       COUNT(o.OrderID)             AS PaidOrders,
       ISNULL(SUM(v.OrderValue), 0) AS PaidRevenue
FROM dbo.Customers AS c
LEFT JOIN dbo.Orders AS o
       ON o.CustomerID = c.CustomerID
      AND o.OrderDate >= @MonthStart
      AND o.OrderDate <  DATEADD(MONTH, 1, @MonthStart)
      AND EXISTS (SELECT 1 FROM dbo.Payments AS p
                  WHERE p.OrderID = o.OrderID AND p.Status = 'SUCCESS')
OUTER APPLY (SELECT SUM(oi.Quantity * oi.UnitPrice * (100 - oi.DiscountPct) / 100) AS OrderValue
             FROM dbo.OrderItems AS oi
             WHERE oi.OrderID = o.OrderID) AS v
GROUP BY c.CustomerID;

Testy uruchamiamy w osobnej, pustej bazie DemoShop_Test o identycznym schemacie, nigdy na danych produkcyjnych. Skrypt tworzący taką bazę jest w plikach do pobrania. W poleceniu wymieniliśmy przypadki brzegowe, które chcemy sprawdzić. Możesz je ustalić sam albo najpierw poprosić AI o propozycję i ją przejrzeć. Do tego trzy wymagania techniczne: jawne identyfikatory w danych testowych, oczekiwany wynik zapisany w tabeli i porównanie przez EXCEPT w obie strony.

Mam w SQL Server 2022 funkcję tabelaryczną dbo.fn_PaidRevenueByCustomer (kod niżej, schemat bazy w załączonym pliku demoshop_schemat_dla_ai.txt). Napisz test w T-SQL, który uruchomię w pustej bazie DemoShop_Test o tym samym schemacie (te same tabele, klucze i ograniczenia, bez danych).

Test ma sprawdzić przypadki: klient bez żadnego zamówienia, zamówienie bez płatności i zamówienie tylko z płatnością FAILED, zamówienie z dwiema płatnościami SUCCESS (raty), zamówienie bez pozycji, dwie identyczne pozycje w jednym zamówieniu, zamówienia na granicach miesiąca (pierwsza i ostatnia sekunda miesiąca oraz pierwsza sekunda następnego miesiąca), rabat 0 i 100 procent oraz pustą tabelę klientów.

Dla każdego przypadku przygotuj dane (INSERT z jawnymi identyfikatorami, z zachowaniem kluczy obcych), zapisz oczekiwany wynik w tabeli tymczasowej, porównaj go z wynikiem funkcji przez EXCEPT w obie strony i wypisz jedną linię PASS albo FAIL z nazwą przypadku. Każdy przypadek sprząta po sobie. Na końcu wypisz liczbę PASS i FAIL. Całość ma być jednym skryptem do uruchomienia w SSMS.

[kod funkcji]

ChatGPT generuje skrypt testów T-SQL dla funkcji fn_PaidRevenueByCustomer: każdy przypadek we własnej transakcji z ROLLBACK, tabele #Expected i #TestResults
Odpowiedź ChatGPT: każdy przypadek we własnej transakcji zakończonej ROLLBACK, więc baza po testach zostaje pusta. AI samo zauważyło, że produkty wymagają kategorii, i dołożyło je do danych testowych, żeby nie złamać klucza obcego.

Pierwsze uruchomienie: błąd składni i ani jednego testu

Skrypt miał ponad 1600 linii i wyglądał porządnie. W SSMS zatrzymał się jednak od razu, na etapie analizy składni, więc nie wykonał się żaden test:

SSMS: pierwsza wersja skryptu testów od AI kończy się błędem 102 Incorrect syntax near '=' i nie wykonuje żadnego testu
Komunikat 102 „Incorrect syntax near '='”. Partia z testami nie wykonała się wcale: SQL Server odrzuca ją w całości przed uruchomieniem.

Uruchomiłem skrypt w SSMS na bazie DemoShop_Test i od razu dostaję błąd 102: Incorrect syntax near '='. Żaden test się nie wykonał. Co jest nie tak? Podaj poprawiony skrypt w całości.

ChatGPT wyjaśnia przyczynę błędu 102: linie oddzielające z samych znaków równości bez dwóch myślników nie są komentarzem w T-SQL
Diagnoza AI jest trafna: linie oddzielające przypadki składały się z samych znaków „=”, bez „--” na początku, więc nie były komentarzem. W poprawionej wersji AI rozdzieliło też dwa połączone przypadki, więc testów jest dziewięć.

Błąd był banalny, ale zablokował cały skrypt. To dobra ilustracja zasady, do której wracamy w sekcji Kiedy AI się myli: kod od AI zawsze uruchamiamy, zanim uznamy go za gotowy. Model nie wykonuje swojego kodu, tylko go pisze.

Sprawdzamy oczekiwane wartości, zanim uwierzymy w PASS

Test jest tyle wart, ile jego oczekiwany wynik. Gdyby AI wyliczyło oczekiwaną wartość tak samo błędnie jak funkcja, test przeszedłby i niczego by nie udowodnił. Dlatego każdy przypadek przeliczyliśmy ręcznie z danych, które AI wstawia:

NrPrzypadekDane testowe (maj 2026)Oczekiwany wynikOcena
1Klient bez zamówieńjeden klient, brak zamówień0 zamówień, 0 złpoprawny: klient ma być w wyniku z zerami
2Zamówienie bez płatnościzamówienie NEW, brak płatności0 zamówień, 0 złpoprawny
3Tylko płatność FAILEDpłatność 100 zł ze statusem FAILED0 zamówień, 0 złpoprawny
4Dwie płatności SUCCESSpozycja 1 × 120 zł, raty 40 zł i 80 zł1 zamówienie, 120 złpoprawny: zamówienie liczy się raz
5Opłacone zamówienie bez pozycjipłatność 0 zł SUCCESS, brak pozycji1 zamówienie, 0 złpoprawny: opłacone, ale bez wartości
6Dwie identyczne pozycje2 × (2 szt. po 25 zł)1 zamówienie, 100 złpoprawny
7Granice miesiąca1 maja 00:00:00 (10 zł), 31 maja 23:59:59 (20 zł), 1 czerwca 00:00:00 (40 zł)2 zamówienia, 30 złpoprawny: czerwcowe poza zakresem
8Rabat 0 i 100 procent100 zł bez rabatu, 500 zł z rabatem 100%2 zamówienia, 100 złpoprawny
9Pusta tabela klientówbrak danychpusty wynikpoprawny

Wszystkie dziewięć oczekiwanych wyników zgadza się z definicją funkcji. Dopiero teraz uruchamiamy poprawiony skrypt:

SSMS: poprawiony skrypt testów od AI w bazie DemoShop_Test, siatka wyników z dziewięcioma przypadkami PASS i podsumowaniem 9 PASS, 0 FAIL
Wszystkie dziewięć przypadków na zielono: 9 PASS, 0 FAIL. Siatka wyników pokazuje numer, wynik i nazwę każdego przypadku.
SSMS, zakładka Komunikaty: linie PASS dla każdego przypadku testowego i podsumowanie liczby PASS i FAIL
Ta sama informacja w zakładce Komunikaty, w formie, którą łatwo zapisać do logu przy automatycznym uruchamianiu. Ostrzeżenia o pominięciu NULL w agregacji to skutek przypadków bez płatności i bez pozycji, a nie błąd.

Po testach sprawdziliśmy jeszcze stan bazy: wszystkie tabele w DemoShop_Test mają zero wierszy, bo każdy przypadek kończy się wycofaniem transakcji.

Czy te testy cokolwiek łapią? Celowo psujemy funkcję

Komplet PASS nie dowodzi jeszcze, że testy działają. Test, który zawsze przechodzi, też daje komplet PASS. Żeby to sprawdzić, wprowadzamy do funkcji błąd, który ktoś mógłby zrobić w dobrej wierze: zamieniamy EXISTS na złączenie z tabelą płatności, bo „złączenie jest prostsze”. Taki zabieg nazywa się testem mutacyjnym.

/* „Optymalizacja”: EXISTS zamieniony na złączenie z Payments.
   Wygląda niewinnie, ale zamówienie z dwiema płatnościami SUCCESS liczy się teraz dwa razy. */
CREATE OR ALTER FUNCTION dbo.fn_PaidRevenueByCustomer (@MonthStart date)
RETURNS TABLE
AS
RETURN
SELECT c.CustomerID,
       COUNT(p.OrderID)             AS PaidOrders,
       ISNULL(SUM(v.OrderValue), 0) AS PaidRevenue
FROM dbo.Customers AS c
LEFT JOIN dbo.Orders AS o
       ON o.CustomerID = c.CustomerID
      AND o.OrderDate >= @MonthStart
      AND o.OrderDate <  DATEADD(MONTH, 1, @MonthStart)
LEFT JOIN dbo.Payments AS p
       ON p.OrderID = o.OrderID
      AND p.Status = 'SUCCESS'
OUTER APPLY (SELECT SUM(oi.Quantity * oi.UnitPrice * (100 - oi.DiscountPct) / 100) AS OrderValue
             FROM dbo.OrderItems AS oi
             WHERE oi.OrderID = p.OrderID) AS v
GROUP BY c.CustomerID;
SSMS: po zamianie EXISTS na złączenie z Payments test z dwiema płatnościami SUCCESS kończy się wynikiem FAIL, pozostałe osiem przechodzi
Po zmianie: 8 PASS i 1 FAIL. Oblewa dokładnie ten przypadek, który powinien: zamówienie z dwiema płatnościami.
SSMS, zakładka Komunikaty: linia FAIL przy przypadku z dwiema płatnościami SUCCESS i podsumowanie 8 PASS, 1 FAIL
W komunikatach od razu widać, który przypadek nie przeszedł.

Ile ten błąd kosztowałby na prawdziwych danych? Uruchomiliśmy obie wersje logiki na grudniu 2025 roku w pełnej bazie DemoShop:

Grudzień 2025Opłacone zamówieniaPrzychód
Funkcja poprawna (EXISTS)102 426318 886 990,99 zł
Funkcja po „optymalizacji” (złączenie)107 531368 786 636,93 zł
Różnica+5 105+49 899 645,94 zł (+15,6%)

Prawie 50 milionów złotych zawyżonego przychodu w jednym miesiącu, bez żadnego błędu i bez ostrzeżenia. Na przeglądzie kodu taka zmiana mogłaby przejść, bo wygląda jak uproszczenie. Test numer 4 zatrzymuje ją w kilka sekund.

Jak pracować z testami od AI: listę przypadków brzegowych ustal sam albo przejrzyj propozycję AI; przelicz ręcznie oczekiwane wartości, bo AI może popełnić ten sam błąd co testowany kod; zrób test mutacyjny, czyli zepsuj kod w znany sposób i sprawdź, czy test to wyłapie; uruchamiaj testy w pustej bazie o tym samym schemacie, nigdy na produkcji; trzymaj testy w repozytorium obok kodu i uruchamiaj je przy każdej zmianie. Jeśli w zespole używacie frameworka tSQLt, poproś AI o testy w jego konwencji (tSQLt.FakeTable, tSQLt.AssertEqualsTable).

Pliki z tej sekcji: skrypt pustej bazy DemoShop_Test, funkcja poprawna, funkcja z błędem do testu mutacyjnego i poprawiony skrypt testów od AI.

Oracle i PostgreSQL: ten sam skrypt dla innych baz znajdziesz w plikach oracle_demoshop_pusta_baza.sql i postgresql_demoshop_pusta_baza.sql (pusty schemat DemoShop: 11 tabel z kluczami i ograniczeniami, bez danych).

AI jako SQL Code Reviewer

Przegląd kodu (code review) to drugi zestaw oczu przed wdrożeniem. AI nadaje się do tej roli wyjątkowo dobrze, bo nie męczy się, nie przeocza powtarzalnych wzorców i zna typowe błędy bezpieczeństwa. Polecenie może być krótkie, byle nadawało rolę i nazywało obszary oceny:

Do testu wybraliśmy procedurę, jaką można znaleźć w wielu starszych systemach: wyszukiwanie klientów w panelu obsługi, z warunkami sklejanymi w tekst zapytania i wykonywanymi przez EXEC. Do polecenia dopisaliśmy wersję bazy i dołączyliśmy plik z opisem schematu, żeby AI mogło porównać typy parametrów z kolumnami.

Jesteś seniorem DBA. Zrób code review tego zapytania pod kątem poprawności, wydajności, bezpieczeństwa i czytelności. Baza to SQL Server 2022, schemat w załączonym pliku demoshop_schemat_dla_ai.txt.

[kod procedury]

/* Procedura wyszukiwania klientów z „dawnego” panelu obsługi */
CREATE OR ALTER PROCEDURE dbo.usp_SearchCustomers
    @LastName nvarchar(100),
    @City     nvarchar(100) = NULL,
    @SortBy   varchar(50)   = 'LastName'
AS
BEGIN
    DECLARE @sql nvarchar(max) =
        N'SELECT * FROM dbo.Customers WITH (NOLOCK) WHERE LastName LIKE ''%' + @LastName + N'%''';
    IF @City IS NOT NULL
        SET @sql = @sql + N' AND City = ''' + @City + N'''';
    SET @sql = @sql + N' ORDER BY ' + @SortBy;
    EXEC (@sql);
END;
ChatGPT jako senior DBA ocenia procedurę: krytyczne SQL injection przez trzy parametry, niesargowalny LIKE, NOLOCK, SELECT *, niezgodne typy parametrów
Przegląd od AI zaczyna się od tabeli ocen i trzech problemów krytycznych: wstrzyknięcie kodu przez @LastName, @City i @SortBy. Dalej NOLOCK, SELECT *, typy parametrów szersze niż kolumny, brak SET NOCOUNT ON i niestabilne sortowanie.

Przegląd jest kompletny i trafnie uszeregowany. Na szczególną uwagę zasługują trzy rzeczy. Pierwsza: AI wyjaśnia, dlaczego kolumny sortowania nie da się po prostu przekazać jako parametru (parametr jest wartością, a nie nazwą kolumny) i proponuje listę dozwolonych wartości mapowanych na gotowe fragmenty kodu. Druga: opisuje NOLOCK jako błąd znaczeniowy, a nie optymalizację, bo pozwala czytać dane z niezatwierdzonych transakcji. Trzecia: zauważa, że pusty parametr nazwiska zwróci wszystkich 200 tysięcy klientów.

Czy wstrzyknięcie naprawdę działa? Sprawdzamy na bazie

Opis podatności to jedno, a dowód to drugie. Uruchamiamy starą procedurę z parametrem, który zamyka apostrof i dokleja warunek zawsze prawdziwy:

-- Próba wstrzyknięcia przez parametr z nazwiskiem
EXEC dbo.usp_SearchCustomers
     @LastName = N'x'' OR 1=1 --';
SSMS: stara procedura wywołana z parametrem x' OR 1=1 -- zwraca wszystkich 200 628 klientów z adresami e-mail i telefonami
Wstrzyknięcie przez nazwisko: zamiast klientów o nazwisku zawierającym „x” procedura zwraca całą tabelę, 200 628 wierszy, razem z adresami e-mail, telefonami i datami urodzenia.

Groźniejsza jest kolumna sortowania, bo przez nią da się dopisać do zapytania dowolne polecenie. Tu dopisaliśmy niewinne SELECT name FROM sys.databases, ale w tym miejscu równie dobrze mogłoby stać polecenie zmieniające albo usuwające dane, wykonane z uprawnieniami aplikacji:

-- Próba wstrzyknięcia przez kolumnę sortowania: drugie zapytanie dopisane do ORDER BY
EXEC dbo.usp_SearchCustomers
     @LastName = N'Kowalsk',
     @City     = N'Gdańsk',
     @SortBy   = 'LastName; SELECT name FROM sys.databases';
SSMS: stara procedura wykonuje dodatkowe zapytanie dopisane do parametru sortowania i zwraca drugą siatkę z listą baz danych serwera
Drugie polecenie dopisane do parametru @SortBy wykonało się: pod wynikiem wyszukiwania pojawia się lista baz danych serwera.

Wersja poprawiona przez AI

Napisz poprawioną wersję tej procedury, zachowując jej przeznaczenie: wyszukiwanie klientów po fragmencie nazwiska, opcjonalnie po mieście, z wyborem kolumny sortowania. Panel potrzebuje tylko kolumn CustomerID, FirstName, LastName, City i Segment.

ChatGPT pisze poprawioną procedurę: parametry przez sp_executesql, lista dozwolonych kolumn sortowania, walidacja pustego nazwiska, tylko potrzebne kolumny
Poprawiona procedura: wartości trafiają do sp_executesql jako parametry, sortowanie przechodzi przez listę dozwolonych wartości, pusty parametr kończy się błędem, a zapytanie zwraca tylko pięć potrzebnych kolumn.

Te same próby na poprawionej wersji kończą się tak, jak powinny. Nazwisko ze wstrzyknięciem jest traktowane jako zwykły tekst, którego żaden klient nie ma w nazwisku, więc wynik jest pusty. Kolumna sortowania spoza listy powoduje błąd 50002 z komunikatem z procedury.

-- Ta sama próba na procedurze poprawionej przez AI
EXEC dbo.usp_SearchCustomers
     @LastName = N'x'' OR 1=1 --';
SSMS: poprawiona procedura z parametrem x' OR 1=1 -- zwraca zero wierszy, bo wartość jest traktowana jako tekst
Wersja od AI: to samo wywołanie, zero wierszy. Apostrof i komentarz są częścią szukanego tekstu, a nie kodu.
-- Kolumna sortowania spoza listy dozwolonych wartości
EXEC dbo.usp_SearchCustomers
     @LastName = N'Kowalsk',
     @City     = N'Gdańsk',
     @SortBy   = 'LastName; SELECT name FROM sys.databases';
SSMS: poprawiona procedura odrzuca niedozwoloną wartość sortowania błędem 50002 Invalid SortBy value
Niedozwolona wartość sortowania: błąd 50002 „Invalid SortBy value”. Żadne dodatkowe polecenie się nie wykonało.
-- Normalne wywołanie wersji od AI
EXEC dbo.usp_SearchCustomers
     @LastName = N'Kowalsk',
     @City     = N'Gdańsk',
     @SortBy   = 'FirstName';
SSMS: poprawiona procedura zwraca klientów z Gdańska o nazwisku zawierającym Kowalsk, posortowanych po imieniu
Zwykłe wywołanie działa jak wcześniej: 121 klientów z Gdańska o nazwisku zawierającym „Kowalsk”, tylko kolumny potrzebne panelowi.
Oracle i PostgreSQL: ten sam skrypt dla innych baz znajdziesz w plikach oracle_procedura_bezpieczna.sql i postgresql_procedura_bezpieczna.sql (zmienne wiązane zamiast doklejania tekstu i biała lista kolumn sortowania).

Lista kontrolna przeglądu SQL: 25 punktów

Polecenie z ogólną prośbą o przegląd daje dobre wyniki, ale jeszcze lepsze daje lista, według której AI ma przejść punkt po punkcie i przy każdym napisać „spełnione”, „niespełnione” albo „nie dotyczy”. To samo zestawienie przydaje się w przeglądzie robionym przez człowieka. Ułożyliśmy je z problemów, które pokazujemy w tym przewodniku, przy każdym punkcie jest odsyłacz do przykładu.

NrObszarPunkt kontrolny
1PoprawnośćWynik odpowiada celowi biznesowemu zapisanemu jednym zdaniem
2PoprawnośćZłączenia nie mnożą wierszy (sprawdzone liczności relacji 1:N)
3PoprawnośćWarunki na tabelach z LEFT JOIN są w ON, a nie w WHERE
4PoprawnośćNULL obsłużony świadomie: porównania, NOT IN, COUNT(kolumna), ISNULL i COALESCE
5PoprawnośćZakresy dat półotwarte (>= początek, < początek następnego okresu) i właściwa strefa czasowa
6PoprawnośćAgregaty na właściwym poziomie szczegółowości, bez średniej ze średnich
7PoprawnośćFunkcje okien z jawną partycją, porządkiem i ramką
8PoprawnośćKolejność wyniku jednoznaczna (sortowanie z rozstrzygnięciem remisów)
9PoprawnośćBrak dzielenia całkowitego i obcinania typów (ISNULL, CAST, rozmiary varchar)
10WydajnośćWarunki sargowalne: bez funkcji i obliczeń na kolumnach z indeksem
11WydajnośćTypy parametrów zgodne z typami kolumn (brak niejawnych konwersji)
12WydajnośćTylko potrzebne kolumny, bez SELECT *
13WydajnośćIndeksy wspierają warunki, złączenia i sortowanie (sprawdzone w planie rzeczywistym)
14WydajnośćBrak zbędnych DISTINCT, ORDER BY i wielokrotnego czytania tej samej tabeli
15WydajnośćPodzapytania skorelowane i funkcje skalarne nie wykonują się dla każdego wiersza
16WydajnośćBrak wskazówek (NOLOCK, FORCE ORDER, INDEX) bez udokumentowanego powodu
17WydajnośćZapytanie zachowuje się dobrze dla małych i dużych wartości parametrów (parameter sniffing)
18BezpieczeństwoBrak sklejania tekstu z danymi użytkownika: parametry przez sp_executesql
19BezpieczeństwoIdentyfikatory (kolumny sortowania, nazwy tabel) tylko z listy dozwolonych wartości
20BezpieczeństwoZwracane tylko dane potrzebne odbiorcy, bez zbędnych danych osobowych
21BezpieczeństwoUprawnienia minimalne: konto aplikacji bez praw zapisu tam, gdzie wystarczy odczyt
22CzytelnośćZłączenia jawne (JOIN ... ON), aliasy znaczące, jednolite formatowanie
23CzytelnośćLogika podzielona na nazwane kroki (CTE) z komentarzem przy nieoczywistych regułach
24UtrzymanieObsługa błędów i walidacja parametrów (puste, za krótkie, spoza zakresu)
25UtrzymanieTesty z danymi granicznymi i dowód równoważności przy każdej zmianie

Jesteś seniorem DBA. Zrób code review poniższego kodu T-SQL (SQL Server 2022) według listy kontrolnej. Dla każdego punktu napisz: spełnione, niespełnione albo nie dotyczy, a przy niespełnionych podaj konkretną poprawkę. Na końcu wypisz trzy najważniejsze zmiany w kolejności wdrażania.

Lista kontrolna:
[wklej 25 punktów z tabeli]

Kod:
[wklej kod]

✕Powiększony zrzut ekranu z przewodnika AI w SQL
Szkolenie Język SQL ze wsparciem AI

Szkolenie Język SQL ze wsparciem AI

Najbliższy termin gwarantowany: 28.10.2026

Sprawdź terminy

Najczęściej zadawane pytania

Jak wygenerować testy SQL za pomocą AI?
Podaj AI kod funkcji lub zapytania, schemat bazy i przypadki brzegowe, które chcesz sprawdzić, i wymagaj jawnych danych testowych, oczekiwanego wyniku zapisanego w tabeli oraz porównania przez EXCEPT. Testy uruchamiaj w osobnej, pustej bazie.
Skąd wiadomo, że testy od AI cokolwiek sprawdzają?
Z testu mutacyjnego: celowo psujesz funkcję i sprawdzasz, czy któryś test zawiedzie. U nas po zepsuciu funkcji zawiódł test podwójnej płatności, a komplet dziewięciu testów na poprawnej wersji przechodził.
Czy AI wykryje SQL injection w procedurze składowanej?
W naszym przeglądzie wykryło wstrzyknięcie przez trzy parametry, w tym przez kolumnę sortowania. Podatność potwierdziliśmy na bazie: jedno wywołanie zwróciło 200 628 klientów zamiast kilku, a poprawiona wersja od AI zwraca zero wierszy albo błąd.
Jak poprosić AI o przegląd kodu SQL?
Nadaj mu rolę doświadczonego administratora baz danych, podaj wersję serwera i schemat, a ocenę oprzyj na liście kontrolnej zamiast ogólnej prośby. Wymagaj oceny każdego punktu i konkretnej poprawki przy punktach niespełnionych.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...