SQL Server’da veri türü dönüşümleri, veritabanı sistemlerinin en temel ve kritik işlemlerinden biridir. Bu makalede, Explicit (Açık) Conversion ve Implicit (Örtük) Conversion kavramlarını sql server üzerinde görmek için hangi komutları kullanmamız gerektiğini görmüş olacağız.
Explicit Conversion (Açık Dönüşüm): Explicit conversion, geliştirici tarafından bilinçli olarak yapılan ve SQL ifadelerinde açıkça belirtilen dönüşüm türüdür. SQL Server’da CONVERT ve CAST operatörleri, bir veri türünü başka bir veri türüne dönüştürmek için kullanılır. Her ikisi de benzer işlev görür, ancak bazı farklılıkları vardır.
Implicit Conversion (Örtük Dönüşüm): Implicit conversion, SQL Server tarafından otomatik olarak gerçekleştirilen ve sorgularda açıkça belirtilmeyen dönüşüm türüdür
Yukarıda belirtilen conversion işlemleri için detaylı bilgi için sayfada bulunan Implicit Conversion ve Explicit Conversion makalesi detaylı bir şekilde okunabilir.
Aşağıdaki sorgula implicit conversion yapılarını görebiliriz.
SELECT qp.query_plan
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) qp
WHERE qp.query_plan.exist('//*:Convert[@Implicit="1"]') = 1
Dönen değerden execution planları açıp xml uzantısına tıklarsak implicit conversion yapısı görülebilir.


Ctrl-F tuşu ile ilgili arama yaptığımızda hangi kolonlar üzerinde olduğu görülmektedir.

Aşağıdaki sorgu ile belirtilen veritabanı altında dönen sorgularda implicit conversion yapısının olduğu görülmektedir.
SELECT TOP 20
DB_NAME(st.dbid) AS [Veritabanı],
st.text AS [Sorgu Metni],
qp.query_plan AS [Sorgu Planı],
qs.execution_count AS [Çalışma Sayısı],
CAST(qp.query_plan AS XML).query('
declare default element namespace "http://schemas.microsoft.com/sqlserver/2004/07/showplan";
//ScalarOperator[contains(@ScalarString, "CONVERT_IMPLICIT")]
') AS [Dönüşüm Detayı]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
WHERE
CAST(qp.query_plan AS NVARCHAR(MAX)) LIKE '%CONVERT_IMPLICIT%'
AND st.dbid = DB_ID('DB_NAME')
AND st.text NOT LIKE '%sys.dm_exec_query_stats%'
--ORDER BY qs.execution_count DESC;

Sorgu planında sorgumuzun execution plan yapısı görülebilir.

Dönüşüm detayına bakıldığında convert implicit ifadelerin xml uzantıları gözükmektedir.
<ScalarOperator xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" ScalarString="CONVERT_IMPLICIT(int,[Expr1073],0)">
<Convert DataType="int" Style="0" Implicit="1">
<ScalarOperator>
<Identifier>
<Column
Yukarıdaki komutlarla hangi sorguların Conversion işlemleri yaptığını detaylı bir şekilde görebiliriz. Başka makalede görüşmek dileğiyle..
Huzur Allah’tandır. (Necm-43)
