Transact-SQL, ofta förkortat till T-SQL eller till och med TSQL, är Microsofts och Sybases egenutvecklade tillägg till SQL. Transact-SQL utvidgar SQL-standarden för att inkludera extra funktioner som inte ingår i SQL-standarden.
Här är ett exempel på en enkel T-SQL-sats:
CREATE DATABASE Movies;
Detta är så enkelt som ett T-SQL-exempel kan bli. Detta skapar en ny databas som heter Movies
.
T-SQL tillhandahåller dock andra alternativ som ska inkluderas i detta uttalande, som var databasfilerna ska finnas, storleken på dessa filer, vad deras maximala storlek ska vara och mer.
T-SQL-funktioner
Några av funktionerna i T-SQL inkluderar:
- Procedurprogrammering
- Lokala variabler
- Olika stödfunktioner för strängbearbetning, datumbearbetning, matematik, etc.
- Ändringar av
DELETE
ochUPDATE
uttalanden. I synnerhet tillåter de att en FROM-sats läggs till, vilket gör att anslutningar kan inkluderas. - T-SQL har en
BULK INSERT
uttalande som låter dig importera en datafil till en databastabell eller vy i ett användarspecificerat format.
En av de främsta fördelarna med ovanstående tillägg är att du har mycket mer programmerbarhet när du använder T-SQL vs SQL. Lagrade procedurer låter dig till exempel införliva programmeringslogik i din databas. Du kan skicka en eller flera parametrar till en lagrad procedur, och den lagrade proceduren returnerar en utdata som varierar beroende på parametrarnas värden.
T-SQL innehåller också ett stort antal inbyggda funktioner, samt stödjer användardefinierade funktioner.
Ett exempel på en inbyggd funktion
Här är ett annat grundläggande exempel, denna gång med en av T-SQL:s inbyggda funktioner:
SELECT GETDATE();
Resultat:
2018-05-06 23:30:37.003
I det här fallet använder vi T-SQL:s GETDATE()
funktion för att returnera aktuellt datum och tid. Detta används tillsammans med SELECT
sats, som är en vanlig SQL-sats för att returnera data.
Vi kan också använda den funktionen som ett argument för en annan funktion. Här är ett exempel:
SELECT FORMAT(GETDATE(), 'MMM');
Resultat:
May
I det här fallet använder vi T-SQL FORMAT()
funktion för att extrahera bara månadsdelen av datumet och presentera det i ett visst format. Du kan se fler datum/tid-exempel på How to Format the Date &Time in SQL Server.
Historik för T-SQL
Även om Transact-SQL (och SQL Server) är mest känd som en Microsoft-sak, är det faktiskt resultatet av ett partnerskap mellan Microsoft och Sybase som startade 1987. Detta partnerskap upplöstes 1994.
Efter detta fortsatte T-SQL att stödjas av databasprodukter släppta av båda företagen, men varje företag utvecklade sina databasprodukter i sin egen riktning. Därför finns det vissa skillnader mellan Sybase T-SQL och Microsoft T-SQL.
T-SQL och GUI-verktyg
Transact-SQL är centralt för SQL Server. De flesta operationer i SQL Server görs med T-SQL. Detta är sant även om du använder ett GUI-verktyg (som SSMS eller DBeaver) och du faktiskt inte gör någon programmering. Varje gång du använder en applikation för att interagera med SQL Server, använder applikationen T-SQL bakom kulisserna för att utföra den angivna uppgiften.
Men SQL Server är inte det enda databashanteringssystemet som stöder Transact-SQL. Microsoft Azure SQL Database stöder också T-SQL. De flesta T-SQL-funktioner som applikationer använder stöds fullt ut i både Microsoft SQL Server och Azure SQL Database (även om det finns några undantag).
Om kommandot GO
Alla som har använt T-SQL kommer förmodligen att känna till GO
kommando. Det här nyckelordet placeras ofta i slutet av en grupp påståenden. Till exempel kan det första exemplet ovan också skrivas så här:
CREATE DATABASE Movies; GO
Men GO
kommandot är faktiskt inte en del av Transact-SQL. Faktum är att GO
kommandot kan inte ens uppta samma rad som en Transact-SQL-sats.
GO
är ett av kommandona som känns igen av sqlcmd och osql verktyg, samt SQL Server Management Studio Code Editor för att underlätta läsbarheten och exekveringen av batcher och skript. GO
kommandot signalerar slutet på en sats av Transact-SQL-satser till SQL Server-verktygen.
SQL Server-verktyg tolkar GO
som en signal om att de ska skicka den aktuella batchen av Transact-SQL-satser till en instans av SQL Server. Den aktuella satsen med satser består av alla satser som skrivits in sedan den senaste GO
, eller sedan starten av ad hoc-sessionen eller skriptet om detta är den första GO
.
Andra proprietära SQL-tillägg
Transact-SQL är inte det enda tillägget till SQL-standarden. Olika databassystem har sina egna tillägg. Till exempel använder Oracle ett proprietärt procedurspråk som heter PL/SQL, och PostgreSQL använder ett procedurspråk som heter PL/pgSQL.
Även om proprietära SQL-tillägg har sina fördelar (som utökad funktionalitet), har de sina nackdelar. En stor nackdel är att de kan göra saker svåra om du någonsin behöver porta en databas från ett system till ett annat. Till exempel, om din organisation plötsligt bestämmer sig för att den ska använda Oracle istället för SQL Server, kan du behöva gå igenom all SQL Server-kod och skriva om den för Oracle. Detta kräver också att du kommer igång med syntaxen för båda systemen.