Hoşgeldiniz           
   
"SQL Server başvuru kaynağınız"
Skip Navigation Links
=========
Anasayfa
Danışmanlık
Makaleler
Hatalar \ Çözümler
Duyurular
Diğer
T-SQL Öğreniyorum
İpuçları
Yararlı Adresler
Mesaj TahtasıExpand Mesaj Tahtası
HakkımdaExpand Hakkımda
İletişim
Kullanıcı Adı:
Şifre:
 

Ne Mutlu Türküm Diyene!

SQL Habergrubu

Yazılarımı nasıl buluyorunuz?






Uyumluluk

En Son SQL Server ile İlgili Okuduğum Kitaplar
- Designing and Optimizing Data Access by Using SQL Server 2005 - MS Press (İngilizce)
- Microsoft SQL Server 2005 Database Solutions Design - Wiley Publishing (İngilizce)- Optimizing and Maintaining a Database Administration Solution by Using SQL Server 2005 - MS Press (İngilizce)- Designing a Database Server Infrastructure Using SQL Server 2005 - MS Press (İngilizce)- SQL Server 2005 Implementation and Maintenance - MS Press (İngilizce)
- SQL Server 2005 Administrators Companion - MS Press (İngilizce)


 
Mesaj Başlığı "Arithmetic overflow error converting numeric to data type numeric."
Hata Açıklaması Bu hata mesajını DECIMAL, NUMERIC gibi veri tiplerini kullanarak işlemler yaptığınızda alabilirsiniz.

Hatanın nedeni ise, yapılan işlemler sonucu ortaya çıkan sayının aktarılacağı değişkenin veri tipi ayarının doğru yapılandırılmamasıdır.

Bir örnekle anlatayım. Örnekte üç adet değişken tanımlıyorum. Birinci değişken "A", herhangi bir sayı, ikinci değişken "B", bu da herhangi bir sayı, üçüncü değişken ise, "A" ve "B" değişkenlerinin toplamının aktarılacağı "Sonuc" isimli değişken. "A" ve "B" değişkenlerine birer sayı atadıktan sonra, "A" ve "B" değişkenlerine atadığım sayıların sonucunu toplama işlemiyle "Sonuc" değişkenine aktarıyorum.

DECLARE @A NUMERIC(26, 6)
DECLARE @B NUMERIC(26, 6)
DECLARE @Sonuc NUMERIC(26, 6)

SET @A = 98765432109876543210.123456
SET @B = 98765432109876543210.123456
SELECT @Sonuc = (@A + @B)

SELECT @Sonuc

Bu işlem sonucunda "Arithmetic overflow error converting numeric to data type numeric." hatası ile karşılaşırım.

Bu sorunu daha iyi anlatabilmek adına, bilmeyen arkadaşlar için "NUMERIC(26, 6)" nın ne anlama geldiğinden de çok kısaca bahsedeyim. Parantez içerisindeki 26 sayısı, Numeric veri tipiyle belirlenen değişkenin içine virgülün sağındaki ve solundaki topram rakam sayısıdır. Bu amaç için en fazla 38 sayısı kullanılabilir. Parantezin içerisinde ve virgülün sağında bulunan 6 sayısı ise, Numeric veri tipinde olan değişkenin içerisindeki sayının ondalık kısmındaki sayı uzunluğunu verir. Örnek olarak "SET @A" komutuyla "A" değişkenine atadığım ondalık kesirli sayıya bakabilirsiniz. Noktanın solunda tam 20 adet rakam vardır, sağında ise 6 adet. Toplamda 26 adet. 27 olursa, bu hata ile karşılaşırsınız.
Çözüm Çözüme de yukarıdaki örnekten devam ederek ulaşacağım.

Bizim bu işlem sonucunda da bu hata ile karşılaşmamızın sebebi, sonucumuzun 27 rakamdan oluşan bir sayı olarak çıkmasıdır. Yani "A" ve "B" değişkenlerinin toplamı 27 adet rakamdan oluşan bir sayıyı kapsamaktadır. Eğer örneğimizdeki "Sonuc" değişkenini DECLARE komutu ile tanımlarken NUMERIC(27,6) şeklinde tanımlarsak, o zaman sonuç hatasız şekilde alınabilecektir.

DECLARE @Sonuc NUMERIC(27, 6)

şeklinde.
SQL Server Versiyonu SQL Server 2005
İşletim Sistemi Bu sorunla tüm versiyonlarda karşılaşılabilir.








 
Bu sitenin tüm hakları, Ekrem Önsoy' a aittir.