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, SETi 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ą BEGINi END, BREAK, CONTINUE, GOTO, IFi ELSE, RETURN, WAITFOR, i WHILE.

IFi ELSEzezwó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 @@DATEFIRSTustawieniu).

IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
   PRINT 'It is the weekend.';
ELSE
   PRINT 'It is a weekday.';

BEGINi ENDzaznacz blok instrukcji . Jeśli więcej niż jedna instrukcja ma być kontrolowana przez warunek w powyższym przykładzie, możemy użyć BEGINi ENDtak:

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;

WAITFORbę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.

RETURNsłuży do natychmiastowego powrotu z procedury składowanej lub funkcji.

BREAKkończy otaczającą WHILEpętlę, podczas gdy CONTINUEpowoduje wykonanie kolejnej iteracji pętli. Poniżej WHILEpodano 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 DELETEi UPDATEsą ulepszone, aby umożliwić użycie danych z innej tabeli w operacji bez konieczności wykonywania podzapytania:

  • DELETEakceptuje połączone tabele w FROMklauzuli, podobnie jak SELECT. Po wykonaniu tej czynności nazwa lub alias, z której ma zostać usunięta tabela w łączeniu, jest umieszczana między DELETEi FROM.
  • UPDATEumożliwia FROMdodanie klauzuli. Tabela, która ma zostać zaktualizowana, może być połączona w FROMklauzuli 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, usersktó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

BULKto 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 INSERTwyników zapewnia lepszą wydajność niż procesy, które wystawiają indywidualne INSERTzestawienia 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 CATCHlogikę do obsługi zachowania typu wyjątku. To zachowanie umożliwia programistom uproszczenie kodu i pominięcie @@ERRORsprawdzania 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ż

Bibliografia

Zewnętrzne linki