Transactie-SQL - Transact-SQL
Transact-SQL ( T-SQL ) is de eigen extensie van Microsoft en Sybase op de SQL (Structured Query Language) die wordt gebruikt voor interactie met relationele databases . T-SQL breidt de SQL-standaard uit met procedureel programmeren , lokale variabelen , verschillende ondersteunende functies voor stringverwerking, datumverwerking, wiskunde, enz. en wijzigingen in de DELETE- en UPDATE- instructies.
Transact-SQL staat centraal bij het gebruik van Microsoft SQL Server . Alle toepassingen die communiceren met een exemplaar van SQL Server doen dit door Transact-SQL-instructies naar de server te verzenden, ongeacht de gebruikersinterface van de toepassing.
Opgeslagen procedures in SQL Server zijn uitvoerbare routines aan de serverzijde. Het voordeel van opgeslagen procedures is de mogelijkheid om parameters door te geven.
Variabelen
Transact-SQL biedt de volgende instructies om lokale variabelen te declareren en in te stellen: DECLARE, SETen SELECT.
DECLARE @var1 NVARCHAR(30);
SET @var1 = 'Some Name';
SELECT @var1 = Name
FROM Sales.Store
WHERE CustomerID = 100;
Stroomregeling
Sleutelwoorden voor stroombeheer in Transact-SQL zijn BEGINen END, BREAK, CONTINUE, GOTO, IFen ELSE, RETURN, WAITFOR, en WHILE.
IFen ELSEvoorwaardelijke uitvoering toestaan. Deze batchverklaring zal "Het is het weekend" afdrukken als de huidige datum een weekenddag is, of "Het is een weekdag" als de huidige datum een weekdag is. (Opmerking: deze code gaat ervan uit dat zondag is geconfigureerd als de eerste dag van de week in de @@DATEFIRSTinstelling.)
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
PRINT 'It is the weekend.';
ELSE
PRINT 'It is a weekday.';
BEGINen ENDmarkeer een blok uitspraken . Als in het bovenstaande voorbeeld meer dan één instructie moet worden beheerd door de voorwaardelijke, kunnen we dit gebruiken BEGINen ENDleuk vinden:
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;
WAITFORzal een bepaalde tijd wachten, of tot een bepaald tijdstip van de dag. De verklaring kan worden gebruikt voor vertragingen of om de uitvoering tot de ingestelde tijd te blokkeren.
RETURNwordt gebruikt om onmiddellijk terug te keren van een opgeslagen procedure of functie.
BREAKbeëindigt de omsluitende WHILElus, terwijl CONTINUEde volgende iteratie van de lus wordt uitgevoerd. Een voorbeeld van een WHILElus wordt hieronder gegeven.
DECLARE @i INT;
SET @i = 0;
WHILE @i < 5
BEGIN
PRINT 'Hello world.';
SET @i = @i + 1;
END;
Wijzigingen in DELETE- en UPDATE-instructies
In Transact-SQL, zowel het DELETEen de UPDATEverklaringen worden verbeterd om data vrij te geven van een andere tafel om te worden gebruikt in de operatie, zonder een subquery:
-
DELETEaccepteert samengevoegde tabellen in deFROMclausule, vergelijkbaar metSELECT. Wanneer dit is gedaan, wordt de naam of alias van welke tabel in de join moet worden verwijderd, tussenDELETEen geplaatstFROM. -
UPDATEmaakt het mogelijk om eenFROMclausule toe te voegen. De tabel die moet worden bijgewerkt, kan ofwel worden toegevoegd aan deFROMclausule en waarnaar wordt verwezen door een alias, of er kan alleen naar worden verwezen aan het begin van de instructie volgens standaard-SQL.
In dit voorbeeld worden alle personen verwijderd usersdie zijn gemarkeerd met de vlag 'Inactief'.
DELETE u
FROM users AS u
INNER JOIN user_flags AS f
ON u.id = f.id
WHERE f.name = 'idle';
BULK INSERT
BULKis een Transact-SQL-instructie die een bulkproces voor het laden van gegevens implementeert, waarbij meerdere rijen in een tabel worden ingevoegd en gegevens uit een extern sequentieel bestand worden gelezen. Gebruik van BULK INSERTresultaten leidt tot betere prestaties dan processen die afzonderlijke INSERTinstructies geven voor elke toe te voegen rij. Aanvullende details zijn beschikbaar in MSDN .
PROBEREN TE VANGEN
Vanaf SQL Server 2005 introduceerde Microsoft extra TRY CATCHlogica om het gedrag van het uitzonderingstype te ondersteunen. Dit gedrag stelt ontwikkelaars in staat om hun code te vereenvoudigen en @@ERRORcontrole na elke SQL-uitvoeringsopdracht weg te laten.
-- 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;
Zie ook
- Adaptive Server Enterprise (Sybase)
- PL/SQL (Oracle)
- PL/pgSQL (PostgreSQL)
- SQL/PSM (ISO-standaard)
- Sys.sysobjects
- Gegevensstroom in tabelvorm