Pemangkasan Rentetan nvarchar(maks)
Apabila cuba menggabungkan rentetan besar dalam SQL Server menggunakan jenis data nvarchar(max), pengguna mungkin menghadapi pemangkasan yang tidak dijangka kepada 4000 aksara. Isu ini berpunca daripada penukaran tersirat.
Isu Penukaran Tersirat
Apabila menggabungkan nilai Unicode/nChar/nVarChar, SQL Server secara tersirat menukar rentetan yang terhasil kepada nVarChar(4000). Penukaran tersirat ini berlaku walaupun pembolehubah sasaran ditakrifkan sebagai nvarchar(maks). Malangnya, SQL Server gagal memberikan amaran atau ralat apabila pemotongan berlaku, berpotensi membawa kepada data yang salah.
Penyelesaian: Paksa Penukaran Eksplisit
Untuk mengelakkan isu ini, ia adalah penting untuk memaksa penukaran eksplisit kepada nVarChar(MAX) apabila membina rentetan. Ini boleh dicapai dengan mendahului rentetan dengan CAST('' sebagai nVarChar(MAX)) seperti berikut:
SET @Query = CAST('' as nVarChar(MAX)) -- Force implicit conversion to nVarChar(MAX) + 'SELECT...'-- some of the query gets set here + '...'-- more query gets added on, etc.
Mengapa Isu Penukaran Tersirat Berlaku
Di belakang adegan, SQL Server menilai bahagian kanan tugasan terlebih dahulu, menghasilkan penukaran tersirat kepada nVarChar(4000). Selepas penukaran ini, rentetan diberikan kepada pembolehubah nvarchar(maks), tetapi pada ketika itu, pemotongan telah berlaku.
Nota tentang Rentetan Harfiah
Ia adalah penting untuk ambil perhatian bahawa rentetan literal (iaitu, rentetan berkod keras yang disertakan dalam apostrof) mempunyai panjang maksimum 4000 aksara. Memecahkan rentetan sedemikian kepada segmen yang lebih kecil mungkin diperlukan untuk mengelakkan pemotongan.
Atas ialah kandungan terperinci Mengapa Rentetan nvarchar(maks) Saya Dipotong dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!