A maioria das pessoas que usa o SQL Server conhece a convenção de adicionar
GO
ao final de cada lote de instruções T-SQL. Mas talvez menos conhecido, é que você também pode adicionar um número inteiro após GO
para especificar quantas vezes o lote deve ser executado. Exemplo 1 – Uso básico
Aqui está um exemplo de como funciona.
SELECT GETDATE() AS DateTime;GO 3
Resultado:
+-------------------------+| DataHora ||-------------------------|| 2020-01-08 09:26:31.663 |+-------------------------+Início do loop de execução+--------- ----------------+| DataHora ||-------------------------|| 2020-01-08 09:26:31.663 |+-------------------------+Início do loop de execução+--------- ----------------+| DataHora ||-------------------------|| 2020-01-08 09:26:31.663 |+-------------------------+Início do loop de execuçãoTempo:0,578s
Eu especifiquei
GO 3
o que resultou na execução da consulta três vezes. Também recebi as palavras “Iniciando o loop de execução” cada vez que a consulta era executada. Obtenho resultados diferentes para essa consulta, dependendo de qual ferramenta usei para executar a consulta. Estes são os resultados que obtive usando o mssql-cli ferramenta de linha de comando. Os segundos fracionários são todos iguais. Mas quando usei o Azure Data Studio, os segundos fracionários aumentaram.
Exemplo 2 - Imprimir Data/Hora
Aqui está um exemplo que executei usando o Azure Data Studio mostrando o incremento de segundos fracionários.
DECLARE @theTime time(7) =GETDATE();PRINT @theTime;GO 5
Resultado:
Começou a executar a consulta no loop de execução da linha 4Beginning09:31:40.610000009:31:40.616666709:31:40.620000009:31:40.623333309:31:40.6266667Execução em lote concluída 5 vezes...Tempo total de execução:00:00:00.022Exemplo 3 – Um exemplo de banco de dados
Aqui está um exemplo que insere dados em um banco de dados.
CREATE TABLE LoopTest( LoopTestId identificador único NOT NULL DEFAULT NEWID(), InsertDate datetime2(7) NOT NULL DEFAULT GETDATE());GOINSERT LoopTest (LoopTestId, InsertDate)VALUES (DEFAULT, DEFAULT);GO 20SELECT *FROM LoopTest;GO
Resultado:
+---------------------------------------+------- ------------+| LoopTestId | InserirData ||--------------------------------------+------------ ----------|| 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 | 08-01-2020 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 | 08-01-2020 09:37:38.5900000 || 2c215900-0fd8-4889-8115-2a904ac72a61 | 08-01-2020 09:37:38.5933333 || 01ccc184-3657-4298-98a7-b31e158a56e8 | 08-01-2020 09:37:38.5933333 || 9270036f-8821-45c8-aef5-30aec2d4f4b4 | 08-01-2020 09:37:38.6000000 |+------------------------------------------------- +-----------------------------+
Neste caso, ambas as colunas estão sendo inseridas comDEFAULT
, o que resulta em cada coluna sendo preenchida com seu valor padrão (que também especifico). A primeira coluna tem um valor padrão deNEWID()
, uma função que gera um GUID. A segunda coluna tem um padrão deGETDATE()
, que resulta na data e hora atuais.