sql >> Database >  >> RDS >> Sqlserver

Snelste manier om dezelfde query meerdere keren uit te voeren in SQL Server

De meeste mensen die SQL Server gebruiken, kennen de conventie van het toevoegen van GO aan het einde van elke batch T-SQL-instructies. Maar misschien minder algemeen bekend, is dat je ook een geheel getal kunt toevoegen na GO om aan te geven hoe vaak de batch moet worden uitgevoerd.

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld van hoe het werkt.

SELECT GETDATE() AS DateTime;
GO 3

Resultaat:

+-------------------------+
| DateTime                |
|-------------------------|
| 2020-01-08 09:26:31.663 |
+-------------------------+
Beginning execution loop
+-------------------------+
| DateTime                |
|-------------------------|
| 2020-01-08 09:26:31.663 |
+-------------------------+
Beginning execution loop
+-------------------------+
| DateTime                |
|-------------------------|
| 2020-01-08 09:26:31.663 |
+-------------------------+
Beginning execution loop
Time: 0.578s

Ik heb GO 3 opgegeven waardoor de query drie keer werd uitgevoerd. Ik kreeg ook de woorden "Beginning uitvoeringslus" elke keer dat de query werd uitgevoerd.

Ik krijg verschillende resultaten voor deze query, afhankelijk van de tool die ik heb gebruikt om de query uit te voeren. Dit zijn de resultaten die ik kreeg tijdens het gebruik van de mssql-cli opdrachtregel tool. De fractionele seconden zijn allemaal hetzelfde. Maar toen ik Azure Data Studio gebruikte, namen de fracties van seconden toe.

Voorbeeld 2 – Datum/tijd afdrukken

Hier is een voorbeeld dat ik heb uitgevoerd met Azure Data Studio en waarbij de fractionele seconden worden weergegeven.

DECLARE @theTime time(7) = GETDATE();
PRINT @theTime;
GO 5

Resultaat:

Started executing query at Line 4
Beginning execution loop
09:31:40.6100000
09:31:40.6166667
09:31:40.6200000
09:31:40.6233333
09:31:40.6266667
Batch execution completed 5 times...
Total execution time: 00:00:00.022

Voorbeeld 3 – Een databasevoorbeeld

Hier is een voorbeeld dat gegevens in een database invoegt.

CREATE TABLE LoopTest
(
    LoopTestId uniqueidentifier NOT NULL DEFAULT NEWID(),
    InsertDate datetime2(7) NOT NULL DEFAULT GETDATE()
);
GO

INSERT LoopTest (LoopTestId, InsertDate)
VALUES (DEFAULT, DEFAULT);
GO 20

SELECT *
FROM LoopTest;
GO

Resultaat:

+--------------------------------------+-----------------------------+
| LoopTestId                           | InsertDate                  |
|--------------------------------------+-----------------------------|
| 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 |
+--------------------------------------+-----------------------------+

In dit geval worden beide kolommen ingevoegd met DEFAULT , wat ertoe leidt dat elke kolom wordt gevuld met de standaardwaarde (die ik ook opgeef). De eerste kolom heeft een standaardwaarde van NEWID() , een functie die een GUID genereert. De tweede kolom heeft de standaard GETDATE() , wat resulteert in de huidige datum en tijd.


  1. MariaDB 10.3-replicatie instellen met Ansible en Vagrant

  2. Verschil tussen taal sql en taal plpgsql in PostgreSQL-functies

  3. Oracle Database 12c-software installeren op Windows

  4. Dagen aftrekken van een datum in PostgreSQL