sql >> Databáze >  >> RDS >> Sqlserver

Proměnná SQL serveru:smyčka vs duplicitní?

Umístění DECLARE je nepodstatné (kromě toho, že vám analyzátor nedovolí jej vyzkoušet a použít před DECLARE )

Ve skutečnosti deklaruje pouze jednu proměnnou bez ohledu na to, kolikrát se provede blok kódu obsahující deklaraci.

DECLARE není samo o sobě spustitelným příkazem. např.

IF 1 = 0
BEGIN
DECLARE @I INT
END

SELECT @I

Funguje dobře, i když tento blok není nikdy zadán. Paměť pro proměnné je vyhrazena v době kompilace ještě před zahájením provádění dotazu v kontext provádění .

Jedním ze způsobů, jak to vidět, je

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);

který zobrazuje paměť vyhrazenou pro aktuální dotaz, pokud upravíte počet deklarovaných proměnných, uvidíte změnu vyhrazené paměti, i když DECLARE blok je přímo na konci dávky.




  1. Připojení MySQL one-to-many s Group By vrátí pouze jedno pozorování

  2. Připojovací řetězce Oracle 11g ado pro ODBC (nikoli OLEDB) pomocí excel VBA 64 bit (DSN Less a tnsnames)

  3. Umístění MySQL my.ini

  4. Použití funkce MIN v klauzuli have