|
|
|
|
|
 |
SQL Habergrubu |
|
 |
|
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. |
|