Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Le moyen le plus rapide d'exécuter la même requête plusieurs fois dans SQL Server

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.022 

Exemple 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;GO 

Ré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 de NEWID() , une fonction qui génère un GUID. La deuxième colonne a une valeur par défaut de GETDATE() , ce qui donne la date et l'heure actuelles.