DİNAMİK SQL VE NVARCHAR(MAX) PROBLEMİ | MsSql

Merhaba, Sql Server’de Stored Prosedür dinamik olarak yazıldığında performansta gözle görülür bir fark oluyor. İnternetteki bazı makalelere ve yaşanmış tecrübelere dayanarak bunu söyleyebiliriz.

Hatta ve hatta JOIN’lerde tablonun alanlarını bağlamak yerine, direkt değeri yazmak da performansa pozitif etki etmekte.

.... FROM Customer c
 
INNER JOIN Address a ON a.Company = c.Company

yerine

.... FROM Customer c
 
INNER JOIN Address a ON a.Company = 'YourCompanyCode'

yazmak çok daha performanslı. Sabit değerler bu şekilde yazılabilir.

Tekrar konuya dönecek olursak; uzun bir dinamik sql oluşturulacaksa, değişkene genelde MAX boyut verilir. String ifade uzayabilir gibi düşünerek. Ancak her ne kadar MAX verilse de, bir atama yapılacağı zaman Sql ilk 8000 karakterini aldığından, tek atamada 8000 karakteri geçmeyecek şekilde kurgulamak lazım dinamik Sql’i. Örneğin;

DECLARE @dinamikSql NVARCHAR(MAX);
 
SET @dinamikSql = '.........8000 karakterden az olan kısım';
 
SET @dinamikSql = @dinamikSql  + '.........';

şeklinde birden çok satırda yazarak çözülebilir bu durum.

Selamlar.