27 Aralık 2007 Perşembe

"Msg 8152, Level 16, State 4, Line 1 String or binary data would be truncated. The statement has been terminated."

HATA MESAJI:
"Msg 8152, Level 16, State 4, Line 1 String or binary data would be truncated. The statement has been terminated."

AÇIKLAMA:
Bir tabloda bulunan sütundaki karakter uzunluğundan fazla karakter girmeye çalışırsanız bu hata ile karşılaşırsınız ve bilgi girme işleminiz iptal olur.

Meselâ "Tablom" adında bir tablonuz var ve şeması da aşağıdaki gibi:

CREATE TABLE Tablom
(No Int Identity(1,1) PRIMARY KEY,
Ad nvarchar(10),
Soyad nvarchar(10),
)

Bu tabloya eğer aşağıdaki gibi bir veri girmeye çalışırsanız sorun olmaz:
INSERT INTO Tablom VALUES('Ekrem', 'Önsoy')

Fakat şöyle bir veri girmeye çalışırsanız hata alırsınız:
INSERT INTO Tablom VALUES('Abdulrezzak', 'Önsoy')

Çünkü "Abdulrezzak" adı, tabloyu oluştururken "Ad" sütununa atadığımız 10 karakterlik uzunluğu geçmektedir. Bu nedenle de veri kaydedilemez ve işlem bu hata ile sonuçlanır.

ÇÖZÜM:
Sütununuzun karakter genişliğini arttırın. Meselâ yukarıdaki örneğimizden devam edersek, "Ad" sütununun nvarchar veritipinin karakter genişliğini 15 yaparsak "Adbulrezzak" ismiyle ilgili bir sorun yaşamayız. Tabii diğer isimleri de gözönünde bulundurarak ihtiyacınıza göre daha geniş bir karakter aralığı tanımlayabilirsiniz.

3 yorum:

Adsız dedi ki...

Makale gerçekten çok yardımcı oldu teşekkürler...

Tuna dedi ki...

"create table Status
(
Id int identity(1,1) primary key,
Statu nvarchar
)"

"insert into Status(Statu)
values('Aktif')"


Bunda bile hata alıyorum ne yazarsam yazayım Sizce sorun nedir ?

Ekrem Önsoy dedi ki...

Merhaba,

Tabloyu oluştururken "Statu" isimli alan için NVARCHAR veri tipini kullanmışsınız, fakat buna bir uzunluk atamamışsınız, bu nedenle varsayılan olarak 1 karakter uzunluğu atanmış olmalı. "Aktif" metni de 5 karakter uzunluğunda olduğu için bu hatayı alıyorsunuz. Eğer tablo oluşturma Script'iniz aşağıdaki gibi olsaydı en azından "Aktif" metni için sorun yaşamazdınız.

"create table Status
(
Id int identity(1,1) primary key,
Statu nvarchar(5)
)"