Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Maneira mais rápida de executar a mesma consulta várias vezes no SQL Server


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.022 

Exemplo 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 com DEFAULT , 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 de NEWID() , uma função que gera um GUID. A segunda coluna tem um padrão de GETDATE() , que resulta na data e hora atuais.