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

Zmienna serwera SQL:pętla vs duplikat?

Umieszczenie DECLARE jest nieistotna (poza tym, że parser nie pozwoli ci spróbować go użyć przed DECLARE )

W rzeczywistości deklaruje tylko jedną zmienną, niezależnie od tego, ile razy blok kodu zawierający deklarację jest wykonywany.

DECLARE nie jest samo w sobie instrukcją wykonywalną. np.

IF 1 = 0
BEGIN
DECLARE @I INT
END

SELECT @I

Działa dobrze, nawet jeśli ten blok nigdy nie jest wprowadzany. Pamięć dla zmiennych jest rezerwowana w czasie kompilacji, zanim wykonanie zapytania rozpocznie się nawet w kontekst wykonania .

Jednym ze sposobów zobaczenia tego jest

DBCC FREEPROCCACHE;

GO

SELECT  m2.pages_allocated_count
        --If 2012 use the next line instead
        --,m2.pages_in_bytes/m2.page_size_in_bytes as pages_allocated_count
        ,m2.page_size_in_bytes
FROM   sys.dm_exec_cached_plans cp
       CROSS apply sys.dm_exec_sql_text(cp.plan_handle) t
       JOIN sys.dm_os_memory_objects m1 ON m1.memory_object_address = cp.memory_object_address
       JOIN sys.dm_os_memory_objects m2 ON m1.page_allocator_address = m2.page_allocator_address
WHERE  text LIKE '%this query%'
 AND m2.type = 'MEMOBJ_EXECUTE'

DECLARE @A0 VARCHAR(8000);
DECLARE @A1 VARCHAR(8000);
DECLARE @A2 VARCHAR(8000);
DECLARE @A3 VARCHAR(8000);
DECLARE @A4 VARCHAR(8000);
DECLARE @A5 VARCHAR(8000);
DECLARE @A6 VARCHAR(8000);
DECLARE @A7 VARCHAR(8000);
DECLARE @A8 VARCHAR(8000);
DECLARE @A9 VARCHAR(8000);
DECLARE @A10 VARCHAR(8000);
DECLARE @A11 VARCHAR(8000);
DECLARE @A12 VARCHAR(8000);
DECLARE @A13 VARCHAR(8000);
DECLARE @A14 VARCHAR(8000);
DECLARE @A15 VARCHAR(8000);
DECLARE @A16 VARCHAR(8000);
DECLARE @A17 VARCHAR(8000);
DECLARE @A18 VARCHAR(8000);
DECLARE @A19 VARCHAR(8000);
DECLARE @A20 VARCHAR(8000);

który pokazuje pamięć zarezerwowaną dla bieżącego zapytania, jeśli dostosujesz liczbę zadeklarowanych zmiennych, zobaczysz zmianę zarezerwowanej pamięci, nawet jeśli DECLARE blok znajduje się na samym końcu partii.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać Try Catch do wyświetlania błędu logowania dla parametrów połączenia (App.Config)

  2. Jak określić Like w kolumnie liczb całkowitych?

  3. SQL Server 2000 — serwer połączony

  4. Wprowadzenie do SQL Server

  5. Jak utworzyć tabelę w SQL Server