Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Variabel server SQL:loop vs duplikat?

Penempatan DECLARE tidak penting (kecuali pengurai tidak mengizinkan Anda untuk mencoba dan menggunakannya sebelum DECLARE )

Itu hanya benar-benar mendeklarasikan satu variabel terlepas dari berapa kali blok kode yang berisi deklarasi dieksekusi.

DECLARE itu sendiri bukanlah pernyataan yang dapat dieksekusi. misalnya

IF 1 = 0
BEGIN
DECLARE @I INT
END

SELECT @I

Berfungsi dengan baik meskipun blok itu tidak pernah dimasukkan. Memori untuk variabel dicadangkan pada waktu kompilasi sebelum eksekusi kueri bahkan dimulai di konteks eksekusi .

Salah satu cara untuk melihat ini adalah

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

yang menunjukkan memori yang dicadangkan untuk kueri saat ini, jika Anda menyesuaikan jumlah variabel yang dideklarasikan, Anda akan melihat memori yang dicadangkan berubah meskipun DECLARE blok tepat di akhir kumpulan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan bagian numerik dari string menggunakan T-SQL?

  2. Bagaimana menghindari kondisi balapan basis data saat secara manual menambah PK dari baris baru

  3. Tomcat, Java &SQL Server 2008 R2:Tidak dapat membuat driver JDBC kelas '' untuk menghubungkan URL 'null'

  4. Unicode di SQL Server 2012 Express

  5. Permintaan PIVOT dinamis SQL Server?