Saya menjalankan file data.bat dengan baris berikut:
Rem Tis batch file will populate tables
cd\program files\Microsoft SQL Server\MSSQL
osql -U sa -P Password -d MyBusiness -i c:\data.sql
Isi file data.sql adalah:
insert Customers
(CustomerID, CompanyName, Phone)
Values('101','Southwinds','19126602729')
Ada 8 baris yang lebih mirip untuk menambahkan catatan.
Ketika saya menjalankan ini dengan start
> run
> cmd
> c:\data.bat
, saya mendapatkan pesan kesalahan ini:
1>2>3>4>5>....<1 row affected>
Msg 8152, Level 16, State 4, Server SP1001, Line 1
string or binary data would be truncated.
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
Saya juga seorang pemula, tetapi apa yang harus dilakukan Level #
, dan apa state #
artinya, dan bagaimana cara mencari pesan kesalahan seperti di atas: 8152?
sumber
Firstname nvarchar(5)
Jika Anda memasukkan lebih dari 5 karakter, Anda akan mendapatkan kesalahanSaya memiliki masalah ini meskipun panjang data lebih pendek dari panjang bidang. Ternyata masalahnya adalah memiliki tabel log lain (untuk jejak audit), diisi oleh pemicu di tabel utama, di mana ukuran kolom juga harus diubah.
sumber
Dalam salah satu
INSERT
pernyataan, Anda mencoba memasukkan string yang terlalu panjang ke dalam string (varchar
ataunvarchar
kolom ).Jika tidak jelas yang
INSERT
merupakan pelaku hanya dengan melihat skrip, Anda dapat menghitung<1 row affected>
garis yang terjadi sebelum pesan kesalahan. Angka yang diperoleh ditambah satu memberi Anda nomor pernyataan. Dalam kasus Anda tampaknya INSERT kedua yang menghasilkan kesalahan.sumber
Beberapa data Anda tidak dapat masuk ke kolom basis data Anda (kecil). Tidak mudah menemukan apa yang salah. Jika Anda menggunakan C # dan Linq2Sql, Anda bisa mencantumkan bidang yang akan terpotong:
Pertama-tama buat kelas pembantu:
Kemudian siapkan pembungkus untuk SubmitChanges:
Mempersiapkan detail penangan pengecualian global dan pemotongan log:
Akhirnya gunakan kode:
sumber
Hanya ingin berkontribusi dengan informasi tambahan: Saya memiliki masalah yang sama dan itu karena bidangnya tidak cukup besar untuk data yang masuk dan utas ini membantu saya untuk menyelesaikannya (jawaban teratas menjelaskan semuanya).
TETAPI sangat penting untuk mengetahui apa alasan yang mungkin menyebabkannya.
Dalam kasus saya, saya membuat tabel dengan bidang seperti ini:
Oleh karena itu bidang "Periode" memiliki panjang Nol dan menyebabkan operasi Sisipan gagal. Saya mengubahnya menjadi "XXXXXX" yang merupakan panjang data yang masuk dan sekarang berfungsi dengan benar (karena bidang sekarang memiliki lentgh 6).
Saya harap ini membantu siapa pun dengan masalah yang sama :)
sumber
Situasi lain di mana Anda bisa mendapatkan kesalahan ini adalah sebagai berikut:
Saya memiliki kesalahan yang sama dan alasannya adalah bahwa dalam pernyataan INSERT yang menerima data dari UNION, urutan kolom berbeda dari tabel asli. Jika Anda mengubah urutan # table3 menjadi a, b, c, Anda akan memperbaiki kesalahan tersebut.
sumber
pada server sql Anda dapat menggunakan SET ANSI_WARNINGS OFF seperti ini:
sumber
Saya memiliki masalah yang sama. The panjang kolom saya terlalu pendek.
Yang bisa Anda lakukan adalah menambah panjang atau memperpendek teks yang ingin Anda masukkan ke dalam basis data.
sumber
Juga memiliki masalah ini terjadi pada permukaan aplikasi web. Akhirnya menemukan bahwa pesan kesalahan yang sama berasal dari pernyataan pembaruan SQL di tabel tertentu.
Akhirnya kemudian menemukan bahwa definisi kolom dalam tabel sejarah terkait tidak memetakan panjang kolom
nvarchar
jenis tabel asli dalam beberapa kasus tertentu.sumber
Saya memiliki masalah yang sama, bahkan setelah meningkatkan ukuran kolom bermasalah di tabel.
tl; dr: Panjang kolom yang cocok dalam Jenis Tabel yang sesuai mungkin juga perlu ditingkatkan.
Dalam kasus saya, kesalahan berasal dari layanan Ekspor Data di Microsoft Dynamics CRM, yang memungkinkan data CRM disinkronkan ke SQL Server DB atau Azure SQL DB.
Setelah penyelidikan panjang, saya menyimpulkan bahwa layanan Ekspor Data harus menggunakan Parameter Table-Valued :
Seperti yang Anda lihat dalam dokumentasi di atas, Jenis Tabel digunakan untuk membuat prosedur konsumsi data:
Sayangnya, tidak ada cara untuk mengubah Jenis Tabel, sehingga harus dihapus & dibuat ulang seluruhnya. Karena tabel saya memiliki lebih dari 300 bidang (😱), saya membuat kueri untuk memfasilitasi pembuatan Jenis Tabel yang sesuai berdasarkan definisi kolom tabel (hanya ganti
[table_name]
dengan nama tabel Anda):Setelah memperbarui Jenis Tabel, layanan Ekspor Data mulai berfungsi dengan baik sekali lagi! :)
sumber
Ketika saya mencoba menjalankan prosedur tersimpan saya, saya memiliki masalah yang sama karena ukuran kolom yang saya perlu tambahkan beberapa data lebih pendek daripada data yang ingin saya tambahkan.
Anda bisa menambah ukuran tipe data kolom atau mengurangi panjang data Anda.
sumber
Situasi lain, di mana kesalahan ini dapat terjadi adalah di SQL Server Management Studio. Jika Anda memiliki bidang "teks" atau "ntext" di tabel Anda, tidak peduli bidang apa yang sedang Anda perbarui (misalnya bit atau integer). Tampaknya Studio tidak memuat seluruh bidang "ntext" dan juga memperbarui SEMUA bidang alih-alih yang dimodifikasi. Untuk memecahkan masalah, kecualikan bidang "teks" atau "ntext" dari kueri di Management Studio
sumber
Komentar Kevin Pope di bawah jawaban yang diterima adalah yang saya butuhkan.
Masalahnya, dalam kasus saya, adalah bahwa saya memiliki pemicu yang didefinisikan pada tabel saya yang akan memasukkan pembaruan / memasukkan transaksi ke dalam tabel audit, tetapi tabel audit memiliki ketidakcocokan tipe data di mana kolom dengan
VARCHAR(MAX)
dalam tabel asli disimpan sepertiVARCHAR(1)
dalam tabel audit, jadi pemicu saya gagal ketika saya akan memasukkan sesuatu yang lebih besar dariVARCHAR(1)
pada kolom tabel asli dan saya akan mendapatkan pesan kesalahan ini.sumber
Saya menggunakan taktik yang berbeda, bidang yang dialokasikan 8K di beberapa tempat. Di sini hanya sekitar 50/100 yang digunakan.
Saya ingin kecepatan, karena saya memiliki catatan total 1M, dan memuat 28K dari mereka.
sumber