Jika Anda mendapatkan kesalahan SQL Server Msg 529 yang berbunyi seperti Konversi eksplisit dari tipe data int ke xml tidak diizinkan , mungkin karena Anda mencoba melakukan konversi tipe data yang tidak diizinkan.
SQL Server tidak mengizinkan konversi tertentu. Jika Anda mencoba melakukan konversi seperti itu, Anda akan mendapatkan kesalahan ini.
Contoh Kesalahan
Berikut contoh kode yang menghasilkan kesalahan:
SELECT CAST(10 AS xml);
Hasil:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Di sini, kami mencoba mengonversi angka 10 menjadi xml
ketik.
SQL Server tidak mengizinkan konversi seperti itu sehingga menghasilkan kesalahan.
Kami mendapatkan kesalahan yang sama jika kami mencoba mengonversi nilai itu menjadi date
ketik:
SELECT CAST(10 AS date);
Hasil:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to date is not allowed.
Anda mungkin berasumsi bahwa kami dapat menghilangkan kesalahan dengan menggunakan TRY_CAST()
fungsi sebagai gantinya. Tapi anggapan itu salah:
SELECT TRY_CAST(10 AS xml);
Hasil:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Meskipun TRY_CAST()
fungsi biasanya dapat digunakan untuk mengembalikan NULL
alih-alih kesalahan, itu tidak berlaku untuk kesalahan khusus ini.
Ketika konversi gagal karena konversi tidak diizinkan, bahkan TRY_CAST()
(dan TRY_CONVERT()
) akan mengembalikan kesalahan.
Solusi
Untuk memperbaikinya, Anda perlu mengubah jenis asli atau jenis tujuan (atau keduanya).
Jika Anda melewati kolom, periksa apakah Anda memiliki kolom yang benar. Sama jika Anda meneruskan variabel – periksa apakah itu variabel yang benar.
Misalnya, konversi berikut berhasil:
SELECT CAST('{a:10}' AS xml);
Hasil:
{a:10}
Dan berikut ini juga berhasil:
SELECT CAST(10 AS char(2));
Hasil:
10
Bergantung pada nilai sebenarnya, Anda dapat mencoba mengonversi nilai asli ke jenis yang diterima.
Misalnya, kita dapat mengubah kode penghasil kesalahan XML asli menjadi kode yang tidak menghasilkan kesalahan berikut:
SELECT CAST(CAST(10 AS varchar) AS xml);
Hasil:
10
Dalam hal ini, operasi tidak memvalidasi bahwa hasilnya adalah dokumen XML yang valid. Itu hanya mengubah nilai asli menjadi xml
ketik.
Namun, ini mungkin tidak selalu berhasil, tergantung pada nilai yang Anda coba konversi. Misalnya, contoh tanggal kami masih menghasilkan kesalahan (walaupun, kesalahan yang berbeda):
SELECT CAST(CAST(10 AS varchar) AS date);
Hasil:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Dalam hal ini, kami mendapatkan kesalahan Msg 241, yang merupakan kesalahan yang berbeda. Dalam hal ini, kesalahan bukan karena konversi tidak diizinkan. Itu karena nilai aktual yang menyebabkan masalah. Dalam kasus kami, SQL Server tidak dapat mengonversi angka 10 menjadi tanggal yang valid. Kita perlu mengubah nilai input ke nilai yang lebih bermakna yang mewakili tanggal yang valid.