Rumah >pangkalan data >tutorial mysql >Mengapa pembolehubah NVARCHAR(MAX) saya dipotong dalam SQL Server dinamik SQL?
Memahami Isu Pemangkasan dengan NVARCHAR(MAX)
Apabila membuat pertanyaan SQL dinamik, adalah penting untuk memastikan operasi penggabungan rentetan tidak terhasil dalam pemangkasan yang tidak dijangka. Dalam senario ini, isu yang dihadapi dengan @Query dipotong kepada 4000 aksara walaupun jenis data NVARCHAR(MAX) memerlukan penyiasatan.
Masalah Penukaran Tersirat
Pesalahnya terletak dalam penukaran tersirat. Apabila menggabungkan rentetan yang mengandungi nilai Unicode/nChar/nVarChar, SQL Server secara automatik menukarnya kepada jenis data yang lebih ketat nVarChar(4000). Penukaran ini dilakukan sebelum sebarang penukaran eksplisit kepada NVARCHAR(MAX) diberikan kepada pembolehubah @Query.
Penyelesaian Mudah untuk Mengelak Pemangkasan
Ubatnya adalah dengan memaksa secara eksplisit penukaran kepada nVarChar(MAX) sebelum sebarang operasi penggabungan. Dengan memulakan @Query dengan CAST('' sebagai nVarChar(MAX)), operasi penggabungan seterusnya akan ditambah pada rentetan yang telah ditakrifkan sebagai kapasiti maksimum, menghalang pemotongan.
Mengatasi Had 8000 Aksara
Jika had maksimum ialah 8000 aksara, ini menunjukkan penukaran kepada VarChar(8000) kerana ketiadaan data Unicode. Begitu juga, pemutus jenis eksplisit boleh digunakan untuk memaksa penukaran kepada nVarChar(MAX).
Kekangan Rentetan Literal
Adalah penting untuk ambil perhatian bahawa walaupun dengan NVARCHAR(MAX) , satu rentetan literal tanpa gangguan tidak boleh melebihi 4000 (atau 8000 untuk VarChar) aksara. Untuk mengelakkan pemotongan, rentetan sedemikian hendaklah dipecahkan menggunakan penggabungan.
Atas ialah kandungan terperinci Mengapa pembolehubah NVARCHAR(MAX) saya dipotong dalam SQL Server dinamik SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!