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
, SET
a 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í BEGIN
a END
, BREAK
, CONTINUE
, GOTO
, IF
a ELSE
, RETURN
, WAITFOR
a WHILE
.
IF
a ELSE
umožň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.';
BEGIN
a END
označ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 BEGIN
a END
takto:
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
bude č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.
RETURN
slouží k okamžitému návratu z uložené procedury nebo funkce.
BREAK
ukončí uzavírací WHILE
smyčku, zatímco CONTINUE
způsobí provedení další iterace smyčky. Níže WHILE
je 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 DELETE
a UPDATE
vylepšeny, aby bylo možné v operaci použít data z jiné tabulky, aniž byste potřebovali poddotaz:
-
DELETE
přijímá spojené tabulky vFROM
klauzuli, podobně jakoSELECT
. Když se tak stane, je název nebo alias, které tabulky ve spojení je třeba vypustit z je umístěn meziDELETE
aFROM
. -
UPDATE
umožňujeFROM
přidat klauzuli. Tabulku, kterou je třeba aktualizovat, lze buď spojit vFROM
klauzuli a odkazovat pomocí aliasu, nebo na ni odkazovat pouze na začátku příkazu podle standardního SQL.
Tento příklad odstraní všechny, users
kteří 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
BULK
je 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 INSERT
výsledků s lepším výkonem než procesy, které vydávají jednotlivé INSERT
pří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 CATCH
logiku na podporu chování typu výjimky. Toto chování umožňuje vývojářům zjednodušit svůj kód a vynechat @@ERROR
kontrolu 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é
- Adaptive Server Enterprise (Sybase)
- PL/SQL (Oracle)
- PL/pgSQL (PostgreSQL)
- SQL/PSM (standard ISO)
- Sys.sysobjects
- Tabulkový datový proud