La maggior parte delle persone che utilizzano SQL Server conosce la convenzione di aggiungere GO
alla fine di ogni batch di istruzioni T-SQL. Ma forse meno comunemente noto è che puoi anche aggiungere un numero intero dopo GO
per specificare quante volte deve essere eseguito il batch.
Esempio 1 – Utilizzo di base
Ecco un esempio di come funziona.
SELECT GETDATE() AS DateTime; GO 3
Risultato:
+-------------------------+ | 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
Ho specificato GO 3
che ha comportato l'esecuzione della query tre volte. Ho anche ricevuto le parole "Ciclo di esecuzione iniziale" ogni volta che viene eseguita la query.
Ottengo risultati diversi per questa query a seconda dello strumento utilizzato per eseguire la query. Questi sono i risultati che ho ottenuto utilizzando mssql-cli strumento da riga di comando. I secondi frazionari sono tutti uguali. Ma quando ho usato Azure Data Studio, i secondi frazionari sono aumentati.
Esempio 2 – Stampa data/ora
Ecco un esempio che ho eseguito utilizzando Azure Data Studio che mostra l'incremento dei secondi frazionari.
DECLARE @theTime time(7) = GETDATE(); PRINT @theTime; GO 5
Risultato:
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
Esempio 3:un esempio di database
Ecco un esempio che inserisce dati in un database.
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
Risultato:
+--------------------------------------+-----------------------------+ | 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 questo caso, entrambe le colonne vengono inserite con DEFAULT
, che fa sì che ogni colonna venga popolata con il suo valore predefinito (che ho anche specificato). La prima colonna ha un valore predefinito di NEWID()
, una funzione che genera un GUID. La seconda colonna ha un valore predefinito di GETDATE()
, che risulta nella data e nell'ora correnti.