Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Променлива на SQL сървър:цикъл срещу дубликат?

Поставянето на DECLARE е без значение (с изключение на това, че анализаторът няма да ви позволи да опитате и да го използвате преди DECLARE )

Той всъщност декларира само една променлива, независимо колко пъти се изпълнява блокът от код, съдържащ декларацията.

DECLARE сам по себе си не е изпълним израз. напр.

IF 1 = 0
BEGIN
DECLARE @I INT
END

SELECT @I

Работи добре, въпреки че този блок никога не е влизан. Паметта за променливите се запазва по време на компилация, преди дори да започне изпълнението на заявката в контекст на изпълнение .

Един начин да видите това е

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

което показва паметта, запазена за текущата заявка, ако коригирате броя на декларираните променливи, ще видите промяна в запазената памет, въпреки че DECLARE блок е точно в края на пакета.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете колони от набора от резултати на съхранената процедура

  2. Как да премахнете ограничението по подразбиране на SQL, без да знаете името му?

  3. Изчисление на типа данни на SQL Server Float спрямо десетичната запетая

  4. Не може да се свърже със SQL Server с PHP

  5. Връща редове в произволен ред