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.