Transact-SQL - Transact-SQL

Transact-SQL ( T-SQL ) est l' extension propriétaire de Microsoft et Sybase du SQL (Structured Query Language) utilisé pour interagir avec les bases de données relationnelles . T-SQL étend le standard SQL pour inclure la programmation procédurale , les variables locales , diverses fonctions de support pour le traitement des chaînes, le traitement des dates, les mathématiques, etc. et les modifications apportées aux instructions DELETE et UPDATE .

Transact-SQL est essentiel à l'utilisation de Microsoft SQL Server . Toutes les applications qui communiquent avec une instance de SQL Server le font en envoyant des instructions Transact-SQL au serveur, quelle que soit l'interface utilisateur de l'application.

Les procédures stockées dans SQL Server sont des routines exécutables côté serveur. L'avantage des procédures stockées est la possibilité de passer des paramètres.

Variables

Transact-SQL fournit les instructions suivantes pour déclarer et définir des variables locales : DECLARE, SETet SELECT.

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

Contrôle de flux

Les mots clés pour le contrôle de flux dans Transact-SQL incluent BEGINet END, BREAK, CONTINUE, GOTO, IFet ELSE, RETURN, WAITFOR, et WHILE.

IFet ELSEautoriser l'exécution conditionnelle. Cette instruction batch imprimera "C'est le week-end" si la date actuelle est un jour de week-end, ou "C'est un jour de semaine" si la date actuelle est un jour de semaine. (Remarque : ce code suppose que le dimanche est configuré comme le premier jour de la semaine dans le @@DATEFIRSTparamètre.)

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

BEGINet ENDmarquez un bloc d'instructions . Si plusieurs instructions doivent être contrôlées par le conditionnel dans l'exemple ci-dessus, nous pouvons utiliser BEGINet ENDcomme ceci :

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;

WAITFORattendra un laps de temps donné, ou jusqu'à une heure particulière de la journée. L'instruction peut être utilisée pour des retards ou pour bloquer l'exécution jusqu'à l'heure définie.

RETURNest utilisé pour revenir immédiatement d'une procédure stockée ou d'une fonction.

BREAKtermine la WHILEboucle englobante , tandis que CONTINUEla prochaine itération de la boucle s'exécute. Un exemple de WHILEboucle est donné ci-dessous.

DECLARE @i INT;
SET @i = 0;

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

Modifications des instructions DELETE et UPDATE

Dans Transact-SQL, les instructions DELETEet UPDATEsont améliorées pour permettre aux données d'une autre table d'être utilisées dans l'opération, sans avoir besoin d'une sous-requête :

  • DELETEaccepte les tables jointes dans la FROMclause, de la même manière que SELECT. Lorsque cela est fait, le nom ou l'alias de la table de la jointure à supprimer est placé entre DELETEet FROM.
  • UPDATEpermet FROMd'ajouter une clause. La table à mettre à jour peut être soit jointe dans la FROMclause et référencée par alias, soit référencée uniquement au début de l'instruction selon le SQL standard.

Cet exemple supprime tous ceux usersqui ont été marqués avec l'indicateur « Idle ».

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

INSERTION EN VRAC

BULKest une instruction Transact-SQL qui implémente un processus de chargement de données en masse, insérant plusieurs lignes dans une table, lisant les données à partir d'un fichier séquentiel externe. L'utilisation de BULK INSERTrésultats donne de meilleures performances que les processus qui émettent des INSERTinstructions individuelles pour chaque ligne à ajouter. Des détails supplémentaires sont disponibles dans MSDN .

ESSAYEZ LA CAPTURE

À partir de SQL Server 2005, Microsoft a introduit une TRY CATCHlogique supplémentaire pour prendre en charge le comportement des types d'exception. Ce comportement permet aux développeurs de simplifier leur code et d'omettre la @@ERRORvérification après chaque instruction d'exécution 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;

Voir également

Les références

Liens externes