close

Transact-SQL

Hoppa till navigering Hoppa till sökning
Transact-SQL
programmeringsspråk
FörfattareMicrosoft , Sybase
Paradigmprocedurprogrammering

Inom datavetenskap är Transact-SQL (ibland förkortat som T-SQL ) den proprietära förlängningen av SQL -språket utvecklat av Microsoft och Sybase . Microsofts version levereras med Microsoft SQL Server , medan Sybase använder detta språk i Adaptive Server Enterprise , efterföljaren till Sybase SQL Server .

Utöka SQL-prestanda genom att lägga till:

  • Flödeskontrollfunktioner ; _
  • Möjlighet att definiera lokala variabler .
  • Olika funktioner för manipulering av strängar , datum, matematiska uttryck.
  • Förbättrade DELETE- och UPDATE-satser .

Flödeskontroll och språkstruktur

Nyckelorden med vilka Transact - SQL implementerar flödeskontroll inkluderar e ,,,, och ,,, och .BEGINENDBREAKCONTINUEGOTOIFELSERETURNWAITFORWHILE

IFoch tillåta villkoradELSE exekvering av instruktionsblock. Partiet som följer skriver ut "allmän helgdag" om det aktuella datumet är lördag eller söndag, eller "vardag" annars.

OM DATEPART (dw, GETDATE ()) = 7 ELLER DATEPART (dw, GETDATE ()) = 1
   SKRIV UT "Det är en allmän helgdag."
ANNAN
   SKRIV UT "Det är en vardag."

BEGINoch ENDavgränsa ett block med instruktioner. Om flera satser behöver styras av villkoren som visas i föregående exempel, kan vi använda BEGIN och END så här:

OM DATEPART (dw, GETDATE ()) = 7 ELLER DATEPART (dw, GETDATE ()) = 1
BÖRJA
   SKRIV UT "Det är en allmän helgdag."
   SKRIV UT "Ta semester!"
SLUTET
ANNAN
BÖRJA
   SKRIV UT "Det är en vardag."
   SKRIV UT "Gå till jobbet!"
SLUTET

WAITFORvänta en viss tid, eller till en viss tid på dygnet. Denna instruktion kan användas för att utföra fördröjda åtgärder eller för att blockera utförandet av en operation innan en viss tid uppnås.

RETURNden används för att omedelbart avsluta en lagrad procedur eller en viss funktion.

BREAKgör att en loop som börjar med a avslutas WHILEsamtidigt CONTINUEsom nästa loop i loopen körs. Nedan är ett exempel på en loop WHILE.

Lokala variabler

Lokala variabler är endast tillgängliga för skriptet som använder dem. Transact-SQL stöder inte användardefinierade globala variabler.

DECLAREdeklarerar en variabel och ger den ett namn och en typ. För att ge den ett värde används SET, och därefter kan variabeln användas genom att använda dess namn som referens.

Det här skriptet deklarerar en variabel som ett heltal, initierar den och använder sedan en WHILEto-loop.

DECLARE @Counter INT
SET @Counter = 10
WHILE @Counter> 0
BÖRJA
   SKRIV UT "Antal cykler:" + KONVERTERA (VARCHAR (10), @Counter)
   SET @Counter = @Counter - 1
SLUTET

Inne i slingan skrivs ett meddelande med variabelns aktuella värde ut, varefter räknaren minskas med ett.

En variabel kan också initieras direkt som ett resultat av ett uttalande:

DECLARE @ContaArticoli INT
VÄLJ @ContaArticoli = COUNT (*) FRÅN artiklar
INFOGA I SizeLog (VerificationTime, ArticleCount) VÄRDEN (GETDATE (), @ContaArticoli)

Här läses till exempel antalet rader som finns i tabellen 'Artiklar', sedan läggs en rad som innehåller antalet rader och aktuell tid till tabellen 'SizeLog'.

Utökade DELETE- och UPDATE-satser

I Transact-SQL kan ett alternativ läggas till DELETE- och UPDATE-satser FROMsom tillåter länkning till andra tabeller med en JOIN. I följande exempel raderas alla poster i tabellen 'Användare' som har markerats med flaggan 'Idle'.

TA BORT användare
  FRÅN användare som u
  JOIN Users_flags som f
    PÅ u.id = f.id
 WHERE f.name = 'Idle'

Kritik

Enligt kritiker bryter de nya funktionerna i Transact-SQL inte bara kompatibiliteten med standard-SQL-språket, utan motsäger också antagandet att SQL är designat för att vara ett endast deklarativt språk (som det faktiskt var, åtminstone upp till standardversionen 1999 av SQL ). Med andra ord, de extra funktionerna i Transact-SQL skulle ha implementerats genom att introducera ett riktigt nytt språk av imperativ typ , med en förvirrande och inte särskilt linjär lösning, när istället, enligt kritikerna, samma funktioner kunde ha implementerats med ett annat programmeringslager eller med samma SQL.

Relaterade artiklar

Externa länkar