sql >> Database teknologi >  >> RDS >> Sqlserver

Hurtigste måde at køre den samme forespørgsel flere gange i SQL Server

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ærdien GETDATE() , hvilket resulterer i den aktuelle dato og klokkeslæt.


  1. MAX() Funktion i PostgreSQL

  2. Hvad er størrelsesgrænsen for et varchar2 PL/SQL-underprogramargument i Oracle?

  3. Kald en API fra SQL Server lagret procedure

  4. Gruppér efter alias (Oracle)