La plupart des personnes qui utilisent SQL Server connaissent la convention d'ajout de GO
à la fin de chaque lot d'instructions T-SQL. Mais ce qui est peut-être moins connu, c'est que vous pouvez également ajouter un entier après GO
pour spécifier combien de fois le lot doit être exécuté.
Exemple 1 - Utilisation de base
Voici un exemple de son fonctionnement.
SELECT GETDATE() AS DateTime;GO 3
Résultat :
+-------------------------+| DateHeure ||------------------------------|| 2020-01-08 09:26:31.663 |+-------------------------+Début de la boucle d'exécution+--------- ----------------+| DateHeure ||------------------------------|| 2020-01-08 09:26:31.663 |+-------------------------+Début de la boucle d'exécution+--------- ----------------+| DateHeure ||------------------------------|| 2020-01-08 09:26:31.663 |+-------------------------+Début de la boucle d'exécution :0,578 s
J'ai spécifié GO 3
ce qui a entraîné l'exécution de la requête trois fois. J'ai également reçu les mots "Début de la boucle d'exécution" à chaque exécution de la requête.
J'obtiens des résultats différents pour cette requête en fonction de l'outil que j'ai utilisé pour exécuter la requête. Ce sont les résultats que j'ai obtenus en utilisant le mssql-cli outil de ligne de commande. Les fractions de secondes sont toutes les mêmes. Mais lorsque j'utilisais Azure Data Studio, les fractions de seconde augmentaient.
Exemple 2 – Imprimer la date/l'heure
Voici un exemple que j'ai exécuté à l'aide d'Azure Data Studio montrant l'incrémentation des fractions de secondes.
DECLARE @theTime time(7) =GETDATE();PRINT @theTime;GO 5
Résultat :
Démarrage de l'exécution de la requête à la ligne 4Début de la boucle d'exécution09:31:40.610000009:31:40.616666709:31:40.620000009:31:40.623333309:31:40.6266667L'exécution du lot s'est terminée 5 fois... Durée totale d'exécution :00:00:00.022Exemple 3 - Un exemple de base de données
Voici un exemple qui insère des données dans une base de données.
CREATE TABLE LoopTest( LoopTestId uniqueidentifier NOT NULL DEFAULT NEWID(), InsertDate datetime2(7) NOT NULL DEFAULT GETDATE());GOINSERT LoopTest (LoopTestId, InsertDate)VALUES (DEFAULT, DEFAULT);GO 20SELECT *FROM LoopTest;GORésultat :
+--------------------------------------------------+------- ----------------------+| ID de test de boucle | InsérerDate ||--------------------------------------+-------- ---------------------|| d6eda0a2-710d-467e-a4cf-41602e161851 | 2020-01-08 09:37:38.4733333 || 0d8b3622-946f-4dce-816e-6123516da4e4 | 2020-01-08 09:37:38.4833333 || b3ac2482-7304-4846-a258-5dc51b2623f9 | 2020-01-08 09:37:38.4866667 || 1744836e-6af6-40c8-ab7e-98ca88e8ac1b | 2020-01-08 09:37:38.5000000 || 91c4858c-0c31-4d99-aba5-3a70424239fd | 2020-01-08 09:37:38.5066667 || f8b3de8b-7dd1-46c3-a7a8-b1af711d676d | 2020-01-08 09:37:38.5133333 || 306467d8-2e5b-4046-8102-a33f6906b41d | 2020-01-08 09:37:38.5233333 || 6cf93d79-5921-498e-ab14-55782284dc12 | 2020-01-08 09:37:38.5333333 || 7bb99e3b-d174-47eb-81b3-46b49982eaad | 2020-01-08 09:37:38.5500000 || c788d046-0c6c-4a2b-b3f1-3415470bf723 | 2020-01-08 09:37:38.5566667 || 52bb8951-8e71-46ac-ab98-1e261751dc5b | 2020-01-08 09:37:38.5600000 || 3a061055-0b1e-405c-aa13-480cdde8291c | 2020-01-08 09:37:38.5666667 || 1cabaf44-ac85-4bcf-8fee-7d349cb56561 | 2020-01-08 09:37:38.5700000 || 0cb3a690-66e9-458d-8c27-b0f44af4211d | 2020-01-08 09:37:38.5766667 || 19719223-eb9f-4477-82cc-e60995e0dcee | 2020-01-08 09:37:38.5800000 || 6da2484d-68c7-43f4-8ffc-968545974a42 | 2020-01-08 09:37:38.5833333 || d644bbed-047f-49ac-98c4-e032bdb4add3 | 2020-01-08 09:37:38.5900000 || 2c215900-0fd8-4889-8115-2a904ac72a61 | 2020-01-08 09:37:38.5933333 || 01ccc184-3657-4298-98a7-b31e158a56e8 | 2020-01-08 09:37:38.5933333 || 9270036f-8821-45c8-aef5-30aec2d4f4b4 | 2020-01-08 09:37:38.6000000 |+-------------------------------------------------- +----------------------------+Dans ce cas, les deux colonnes sont insérées avec
DEFAULT
, ce qui fait que chaque colonne est remplie avec sa valeur par défaut (que je précise également). La première colonne a une valeur par défaut deNEWID()
, une fonction qui génère un GUID. La deuxième colonne a une valeur par défaut deGETDATE()
, ce qui donne la date et l'heure actuelles.