De fleste mennesker, der bruger SQL Server, kender til konventionen om at tilføje GO
til slutningen af hver batch af T-SQL-sætninger. Men måske mindre almindeligt kendt er, at du også kan tilføje et heltal efter GO
for at angive, hvor mange gange batchen skal køre.
Eksempel 1 – Grundlæggende brug
Her er et eksempel på, hvordan det virker.
VÆLG GETDATE() AS DateTime;GO 3
Resultat:
+------------------------+| DatoTid ||------------------------|| 2020-01-08 09:26:31.663 |+------------------------+Begyndende eksekveringsløkke+-------- ----------------+| DatoTid ||------------------------|| 2020-01-08 09:26:31.663 |+------------------------+Begyndende eksekveringsløkke+-------- ----------------+| DatoTid ||------------------------|| 2020-01-08 09:26:31.663 |+-------------------------+Begyndende udførelsesløkkeTid:0,578 s
Jeg specificerede GO 3
hvilket resulterede i, at forespørgslen kørte tre gange. Jeg fik også ordene "Begyndende execution loop" hver gang forespørgslen kørte.
Jeg får forskellige resultater for denne forespørgsel afhængigt af hvilket værktøj jeg brugte til at køre forespørgslen. Dette er de resultater, jeg fik, mens jeg brugte mssql-cli kommandolinjeværktøj. De brøkdele sekunder er alle de samme. Men da jeg brugte Azure Data Studio, steg brøkdelen af sekunder.
Eksempel 2 – Udskriv dato/klokkeslæt
Her er et eksempel, som jeg kørte ved hjælp af Azure Data Studio, der viser brøkdelen af sekunder stigende.
DECLARE @theTime time(7) =GETDATE();PRINT @theTime;GO 5
Resultat:
Begyndte at udføre forespørgsel på linje 4 Begyndelse af eksekvering loop09:31:40.610000009:31:40.616666709:31:40.620000009:31:40.6233333309:31:60.60tal fuldført tid:execution:60.60tal gange:execution:50.602 gange før>Eksempel 3 – Et databaseeksempel
Her er et eksempel, der indsætter data i en database.
CREATE TABLE LoopTest( LoopTestId entydigt identifikator NOT NULL DEFAULT NEWID(), InsertDate datetime2(7) NOT NULL DEFAULT GETDATE());GOINSERT LoopTest (LoopTestId, InsertDate)VALUES (DEFAULT, DEFAULTTESTFROM 20TSELECTFROM);Resultat:
+---------------------------------------------+------- ----------------------+| LoopTestId | Indsæt dato ||---------------------------------------------+-------- --------------------|| d6eda0a2-710d-467e-a4cf-41602e161851 | 08-01-2020 09:37:38.4733333 || 0d8b3622-946f-4dce-816e-6123516da4e4 | 08-01-2020 09:37:38.4833333 || b3ac2482-7304-4846-a258-5dc51b2623f9 | 08-01-2020 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 | 08-01-2020 09:37:38.5133333 || 306467d8-2e5b-4046-8102-a33f6906b41d | 08-01-2020 09:37:38.5233333 || 6cf93d79-5921-498e-ab14-55782284dc12 | 08-01-2020 09:37:38.5333333 || 7bb99e3b-d174-47eb-81b3-46b49982eaad | 2020-01-08 09:37:38.5500000 || c788d046-0c6c-4a2b-b3f1-3415470bf723 | 08-01-2020 09:37:38.5566667 || 52bb8951-8e71-46ac-ab98-1e261751dc5b | 2020-01-08 09:37:38.5600000 || 3a061055-0b1e-405c-aa13-480cdde8291c | 08-01-2020 09:37:38.5666667 || 1cabaf44-ac85-4bcf-8fee-7d349cb56561 | 2020-01-08 09:37:38.5700000 || 0cb3a690-66e9-458d-8c27-b0f44af4211d | 08-01-2020 09:37:38.5766667 || 19719223-eb9f-4477-82cc-e60995e0dcee | 2020-01-08 09:37:38.5800000 || 6da2484d-68c7-43f4-8ffc-968545974a42 | 08-01-2020 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 |+------------------------------------------------ +------------------------------------+I dette tilfælde indsættes begge kolonner med
DEFAULT
, hvilket resulterer i, at hver kolonne udfyldes med sin standardværdi (som jeg også angiver). Den første kolonne har en standardværdi påNEWID()
, en funktion, der genererer en GUID. Den anden kolonne har standardværdienGETDATE()
, hvilket resulterer i den aktuelle dato og klokkeslæt.