Transact-SQL
Transact-SQL ( T-SQL ) jest zastrzeżonym rozszerzeniem języka SQL (Structured Query Language) firmy Microsoft i Sybase używanym do interakcji z relacyjnymi bazami danych . T-SQL rozszerza standard SQL o programowanie proceduralne , zmienne lokalne , różne funkcje pomocnicze do przetwarzania ciągów znaków, przetwarzania daty, matematyki itp. oraz zmiany w instrukcjach DELETE i UPDATE .
Transact-SQL ma kluczowe znaczenie dla korzystania z Microsoft SQL Server . Wszystkie aplikacje, które komunikują się z instancją SQL Server, robią to, wysyłając instrukcje języka Transact-SQL do serwera, niezależnie od interfejsu użytkownika aplikacji.
Procedury składowane w SQL Server są wykonywalnymi procedurami po stronie serwera. Zaletą procedur składowanych jest możliwość przekazywania parametrów.
Zmienne
Język Transact-SQL udostępnia następujące instrukcje do deklarowania i ustawiania zmiennych lokalnych: DECLARE
, SET
i SELECT
.
DEKLARUJ @var1 NVARCHAR ( 30 ); SET @var1 = 'Jaka nazwa' ; SELECT @var1 = Nazwa OD Sprzedaż . Przechowuj WHERE ID klienta = 100 ;
Kontrola przepływu
Słowa kluczowe dla kontroli przepływu w języku Transact-SQL obejmują BEGIN
i END
, BREAK
, CONTINUE
, GOTO
, IF
i ELSE
, RETURN
, WAITFOR
i WHILE
.
IF
i ELSE
umożliwiają wykonanie warunkowe. Ta instrukcja wsadowa wyświetli komunikat „Jest weekend”, jeśli bieżąca data to dzień weekendu, lub „Jest to dzień powszedni”, jeśli bieżąca data to dzień powszedni. (Uwaga: ten kod zakłada, że niedziela jest skonfigurowana jako pierwszy dzień tygodnia w ustawieniu @@DATEFIRST
).
JEŚLI CZĘŚĆDATY ( dw , GETDATE ()) = 7 OR DATEPART ( dw , GETDATE ()) = 1 PRINT „Jest weekend”. ; ELSE PRINT „Jest dzień powszedni”. ;
BEGIN
i END
oznaczają blok instrukcji . Jeśli więcej niż jedna instrukcja ma być kontrolowana przez tryb warunkowy w powyższym przykładzie, możemy użyć BEGIN
i END
w następujący sposób:
JEŚLI CZĘŚĆ DAT ( dw , GETDATE ()) = 7 OR DATEPART ( dw , GETDATE ()) = 1 BEGIN PRINT „Jest weekend”. ; DRUKUJ „Odpocznij w weekend!” ; KONIEC ; ELSE BEGIN PRINT „Jest dzień powszedni”. ; DRUKUJ „Zabierz się do pracy w dzień powszedni!” ; KONIEC ;
WAITFOR
będzie czekać przez określoną ilość czasu lub do określonej pory dnia. Instrukcja może być wykorzystana do opóźnienia lub zablokowania wykonania do ustawionego czasu.
RETURN
służy do natychmiastowego powrotu z procedury składowanej lub funkcji.
BREAK
kończy otaczającą pętlę WHILE
, podczas gdy CONTINUE
powoduje wykonanie następnej iteracji pętli. Poniżej podano przykład pętli WHILE .
0
DEKLARUJ @i INT ; USTAW @i = ; WHILE @i < 5 BEGIN PRINT 'Witaj świecie.' ; USTAW @i = @i + 1 ; KONIEC ;
Zmiany w instrukcjach DELETE i UPDATE
W języku Transact-SQL zarówno instrukcje DELETE
, jak i UPDATE
są ulepszone, aby umożliwić użycie danych z innej tabeli w operacji bez konieczności podzapytania:
-
DELETE
akceptuje połączone tabele w klauzuliFROM
, podobnie jakSELECT
. Po wykonaniu tej czynności nazwa lub alias tabeli, z której ma zostać usunięte łączenie, jest umieszczana międzyDELETE
iFROM
. -
UPDATE
umożliwia dodanie klauzuliFROM .
Tabela, która ma zostać zaktualizowana, może być połączona w klauzuliFROM
i odwoływać się przez alias lub odwoływać się tylko na początku instrukcji, zgodnie ze standardowym SQL.
Ten przykład usuwa wszystkich użytkowników
, którzy zostali oznaczeni flagą „Bezczynny”.
USUŃ u OD użytkowników AS u INNER JOIN user_flags AS f ON u . identyfikator = f . id GDZIE f . nazwa = 'bezczynny' ;
WKŁAD ZBIORCZY
BULK
to instrukcja języka Transact-SQL, która implementuje proces masowego ładowania danych, wstawianie wielu wierszy do tabeli, odczytywanie danych z zewnętrznego pliku sekwencyjnego. Użycie BULK INSERT
skutkuje lepszą wydajnością niż procesy, które wydają indywidualne instrukcje INSERT
dla każdego dodawanego wiersza. Dodatkowe szczegóły są dostępne w MSDN .
PRÓBUJ ZŁAPAĆ
Począwszy od SQL Server 2005, firma Microsoft wprowadziła dodatkową logikę TRY CATCH
do obsługi zachowania typu wyjątku. Takie zachowanie umożliwia programistom uproszczenie kodu i pominięcie @@ERROR
po każdej instrukcji wykonania SQL.
-- rozpocznij transakcję BEGIN TRAN ; BEGIN TRY -- wykonaj każdą instrukcję INSERT INTO MYTABLE ( NAME ) VALUES ( 'ABC' ); WSTAW WARTOŚCI DO MYTABLE ( NAZWA ) ( '123' ); -- zatwierdzić transakcję COMMIT TRAN ; END TRY BEGIN CATCH — wycofaj transakcję z powodu błędu
WYCOFANIE TRAN ; ZACZEP KOŃCOWY ;
Zobacz też
- Adaptive Server Enterprise (Sybase)
- PL/SQL (Oracle)
- PL/pgSQL (PostgreSQL)
- SQL/PSM (standard ISO)
- Strumień danych tabelarycznych