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 klauzuli FROM , podobnie jak SELECT . Po wykonaniu tej czynności nazwa lub alias tabeli, z której ma zostać usunięte łączenie, jest umieszczana między DELETE i FROM .
  • UPDATE umożliwia dodanie klauzuli FROM . Tabela, która ma zostać zaktualizowana, może być połączona w klauzuli FROM 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ż

Linki zewnętrzne