Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Najszybszy sposób na wielokrotne uruchamianie tego samego zapytania w SQL Server

Większość osób korzystających z SQL Server zna konwencję dodawania GO na końcu każdej partii instrukcji T-SQL. Ale być może mniej znanym jest to, że możesz również dodać liczbę całkowitą po GO aby określić, ile razy partia powinna zostać uruchomiona.

Przykład 1 – Podstawowe użycie

Oto przykład tego, jak to działa.

SELECT GETDATE() AS DateTime;
GO 3

Wynik:

+-------------------------+
| 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

Określiłem GO 3 co spowodowało, że zapytanie zostało uruchomione trzy razy. Przy każdym uruchomieniu zapytania otrzymuję również słowa „Rozpoczęcie pętli wykonywania”.

Otrzymuję różne wyniki dla tego zapytania w zależności od narzędzia, którego użyłem do uruchomienia zapytania. Oto wyniki, które uzyskałem podczas korzystania z mssql-cli narzędzie wiersza poleceń. Wszystkie ułamki sekund są takie same. Ale kiedy korzystałem z Azure Data Studio, ułamki sekund wzrastały.

Przykład 2 – Drukuj datę/godzinę

Oto przykład, który uruchomiłem za pomocą Azure Data Studio, pokazujący przyrost ułamków sekund.

DECLARE @theTime time(7) = GETDATE();
PRINT @theTime;
GO 5

Wynik:

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

Przykład 3 – Przykład bazy danych

Oto przykład wstawiania danych do bazy danych.

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

Wynik:

+--------------------------------------+-----------------------------+
| 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 |
+--------------------------------------+-----------------------------+

W tym przypadku obie kolumny są wstawiane z DEFAULT , co skutkuje wypełnieniem każdej kolumny wartością domyślną (którą również określam). Pierwsza kolumna ma domyślną wartość NEWID() , funkcja, która generuje identyfikator GUID. Druga kolumna ma domyślną wartość GETDATE() , co skutkuje bieżącą datą i godziną.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zrozumienie rozmiaru pamięci „czas” w SQL Server

  2. Uzyskiwanie i instalacja Microsoft SQL Server Management Studio

  3. Która składnia łączenia jest lepsza?

  4. Jak tworzyć historię LUB widoki audytu z tabel zmiany przechwytywania danych (CDC) w programie SQL Server — samouczek dotyczący programu SQL Server

  5. Instalacja SQL Server 2017