Transact-SQL — Transact-SQL
Transact-SQL ( T-SQL ) to zastrzeżone przez Microsoft i Sybase rozszerzenie języka SQL (Structured Query Language) używanego do interakcji z relacyjnymi bazami danych . T-SQL rozszerza standard SQL o programowanie proceduralne , zmienne lokalne , różne funkcje wsparcia przetwarzania ciągów, przetwarzania dat, 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 wystąpieniem SQL Server, robią to, wysyłając instrukcje Transact-SQL do serwera, niezależnie od interfejsu użytkownika aplikacji.
Procedury składowane w SQL Server to wykonywalne procedury po stronie serwera. Zaletą procedur składowanych jest możliwość przekazywania parametrów.
Zmienne
Transact-SQL zapewnia następujące oświadczenia i ustawić zadeklarować zmienne lokalne: DECLARE
, SET
i SELECT
.
DECLARE @var1 NVARCHAR(30);
SET @var1 = 'Some Name';
SELECT @var1 = Name
FROM Sales.Store
WHERE CustomerID = 100;
Kontrola przepływu
Słowa kluczowe do sterowania przepływem w Transact-SQL obejmują BEGIN
i END
, BREAK
, CONTINUE
, GOTO
, IF
i ELSE
, RETURN
, WAITFOR
, i WHILE
.
IF
i ELSE
zezwól na wykonanie warunkowe. Ta instrukcja wsadowa wydrukuje „Jest to weekend”, jeśli bieżąca data jest dniem weekendu, lub „Jest to dzień powszedni”, jeśli bieżąca data jest dniem tygodnia. (Uwaga: ten kod zakłada, że niedziela jest skonfigurowana jako pierwszy dzień tygodnia w @@DATEFIRST
ustawieniu).
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
PRINT 'It is the weekend.';
ELSE
PRINT 'It is a weekday.';
BEGIN
i END
zaznacz blok instrukcji . Jeśli więcej niż jedna instrukcja ma być kontrolowana przez warunek w powyższym przykładzie, możemy użyć BEGIN
i END
tak:
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
BEGIN
PRINT 'It is the weekend.';
PRINT 'Get some rest on the weekend!';
END;
ELSE
BEGIN
PRINT 'It is a weekday.';
PRINT 'Get to work on a weekday!';
END;
WAITFOR
będzie czekać przez określony czas lub do określonej pory dnia. Instrukcja może być używana do opóźnień lub do zablokowania wykonania do ustawionego czasu.
RETURN
służy do natychmiastowego powrotu z procedury składowanej lub funkcji.
BREAK
kończy otaczającą WHILE
pętlę, podczas gdy CONTINUE
powoduje wykonanie kolejnej iteracji pętli. Poniżej WHILE
podano przykład pętli.
DECLARE @i INT;
SET @i = 0;
WHILE @i < 5
BEGIN
PRINT 'Hello world.';
SET @i = @i + 1;
END;
Zmiany w instrukcjach DELETE i UPDATE
W Transact-SQL obie instrukcje DELETE
i UPDATE
są ulepszone, aby umożliwić użycie danych z innej tabeli w operacji bez konieczności wykonywania podzapytania:
-
DELETE
akceptuje połączone tabele wFROM
klauzuli, podobnie jakSELECT
. Po wykonaniu tej czynności nazwa lub alias, z której ma zostać usunięta tabela w łączeniu, jest umieszczana międzyDELETE
iFROM
. -
UPDATE
umożliwiaFROM
dodanie klauzuli. Tabela, która ma zostać zaktualizowana, może być połączona wFROM
klauzuli i przywoływana przez alias lub może się odwoływać tylko na początku instrukcji, zgodnie ze standardowym SQL.
Ten przykład usuwa wszystkich, users
którzy zostali oznaczeni flagą „Bezczynny”.
DELETE u
FROM users AS u
INNER JOIN user_flags AS f
ON u.id = f.id
WHERE f.name = 'idle';
WSTAW LUZEM
BULK
to instrukcja języka Transact-SQL, która implementuje proces zbiorczego ładowania danych, wstawiając wiele wierszy do tabeli i odczytując dane z zewnętrznego pliku sekwencyjnego. Wykorzystanie BULK INSERT
wyników zapewnia lepszą wydajność niż procesy, które wystawiają indywidualne INSERT
zestawienia 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ą TRY CATCH
logikę do obsługi zachowania typu wyjątku. To zachowanie umożliwia programistom uproszczenie kodu i pominięcie @@ERROR
sprawdzania po każdej instrukcji wykonania SQL.
-- begin transaction
BEGIN TRAN;
BEGIN TRY
-- execute each statement
INSERT INTO MYTABLE(NAME) VALUES ('ABC');
INSERT INTO MYTABLE(NAME) VALUES ('123');
-- commit the transaction
COMMIT TRAN;
END TRY
BEGIN CATCH
-- roll back the transaction because of error
ROLLBACK TRAN;
END CATCH;
Zobacz też
- Adaptive Server Enterprise (Sybase)
- PL/SQL (Oracle)
- PL/pgSQL (PostgreSQL)
- SQL/PSM (norma ISO)
- Sys.sysobjects
- Strumień danych tabelarycznych