Transact -SQL - Transact-SQL

Transact-SQL ( T-SQL ) je proprietární rozšíření společností Microsoft a Sybase na SQL (Structured Query Language) používané k interakci s relačními databázemi . T-SQL rozšiřuje standard SQL o procedurální programování , lokální proměnné , různé podpůrné funkce pro zpracování řetězců, zpracování data, matematiku atd. A změny příkazů DELETE a UPDATE .

Transact-SQL je ústředním prvkem používání serveru Microsoft SQL Server . Všechny aplikace, které komunikují s instancí serveru SQL Server, tak činí odesláním příkazů Transact-SQL na server bez ohledu na uživatelské rozhraní aplikace.

Uložené procedury na serveru SQL Server jsou spustitelné rutiny na straně serveru. Výhodou uložených procedur je schopnost předávat parametry.

Proměnné

Transact-SQL poskytuje následující příkazy deklarovat a nastavené lokální proměnné: DECLARE, SETa SELECT.

DECLARE @var1 NVARCHAR(30);
SET @var1 = 'Some Name';
SELECT @var1 = Name
  FROM Sales.Store
  WHERE CustomerID = 100;

Řízení toku

Klíčová slova pro regulaci průtoku v Transact-SQL zahrnují BEGINa END, BREAK, CONTINUE, GOTO, IFa ELSE, RETURN, WAITFORa WHILE.

IFa ELSEumožňují podmíněné provedení. Toto dávkové prohlášení vytiskne „Je víkend“, pokud je aktuální datum víkendový den, nebo „Je to všední den“, pokud je aktuálním datem všední den. (Poznámka: Tento kód předpokládá, že neděle je v nastavení nakonfigurována jako první den v týdnu @@DATEFIRST.)

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

BEGINa ENDoznačte blok příkazů . Pokud má být více než jeden příkaz řízen podmíněným ve výše uvedeném příkladu, můžeme použít BEGINa ENDtakto:

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;

WAITFORbude čekat po určitou dobu nebo do určité denní doby. Příkaz lze použít ke zpoždění nebo k zablokování provádění do nastaveného času.

RETURNslouží k okamžitému návratu z uložené procedury nebo funkce.

BREAKukončí uzavírací WHILEsmyčku, zatímco CONTINUEzpůsobí provedení další iterace smyčky. Níže WHILEje uveden příklad smyčky.

DECLARE @i INT;
SET @i = 0;

WHILE @i < 5
BEGIN
   PRINT 'Hello world.';
   SET @i = @i + 1;
END;

Změny příkazů DELETE a UPDATE

V Transact-SQL jsou příkazy DELETEa UPDATEvylepšeny, aby bylo možné v operaci použít data z jiné tabulky, aniž byste potřebovali poddotaz:

  • DELETEpřijímá spojené tabulky v FROMklauzuli, podobně jako SELECT. Když se tak stane, je název nebo alias, které tabulky ve spojení je třeba vypustit z je umístěn mezi DELETEa FROM.
  • UPDATEumožňuje FROMpřidat klauzuli. Tabulku, kterou je třeba aktualizovat, lze buď spojit v FROMklauzuli a odkazovat pomocí aliasu, nebo na ni odkazovat pouze na začátku příkazu podle standardního SQL.

Tento příklad odstraní všechny, userskteří byli označeni příznakem „Nečinný“.

DELETE u
  FROM users AS u
  INNER JOIN user_flags AS f
    ON u.id = f.id
    WHERE f.name = 'idle';

HROMADNÁ VLOŽKA

BULKje příkaz Transact-SQL, který implementuje proces hromadného načítání dat, vkládání více řádků do tabulky, čtení dat z externího sekvenčního souboru. Použití BULK INSERTvýsledků s lepším výkonem než procesy, které vydávají jednotlivé INSERTpříkazy pro každý řádek, který se má přidat. Další podrobnosti jsou k dispozici na webu MSDN .

ZKUS CHYTIT

Počínaje SQL Serverem 2005 zavedla společnost Microsoft další TRY CATCHlogiku na podporu chování typu výjimky. Toto chování umožňuje vývojářům zjednodušit svůj kód a vynechat @@ERRORkontrolu po každém příkazu spuštění 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;

Viz také

Reference

externí odkazy