Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khắc phục Msg 529 “Không cho phép chuyển đổi rõ ràng từ kiểu dữ liệu int sang xml” trong SQL Server

Nếu bạn gặp lỗi SQL Server Msg 529 có nội dung như Không cho phép chuyển đổi rõ ràng từ kiểu dữ liệu int sang xml , có thể là do bạn đang cố thực hiện chuyển đổi loại dữ liệu không được phép.

SQL Server không cho phép một số chuyển đổi nhất định. Nếu bạn cố gắng thực hiện một chuyển đổi như vậy, bạn sẽ gặp phải lỗi này.

Ví dụ về Lỗi

Dưới đây là một ví dụ về mã tạo ra lỗi:

SELECT CAST(10 AS xml);

Kết quả:

Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type int to xml is not allowed.

Ở đây, chúng tôi đã cố gắng chuyển đổi số 10 thành xml loại.

Máy chủ SQL không cho phép chuyển đổi như vậy và do đó nó đã trả lại lỗi.

Chúng tôi gặp phải lỗi tương tự nếu chúng tôi cố gắng chuyển đổi giá trị đó thành một date loại:

SELECT CAST(10 AS date);

Kết quả:

Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type int to date is not allowed.

Bạn có thể cho rằng chúng tôi có thể loại bỏ lỗi bằng cách sử dụng TRY_CAST() chức năng thay thế. Nhưng giả định đó sẽ không chính xác:

SELECT TRY_CAST(10 AS xml);

Kết quả:

Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type int to xml is not allowed.

Mặc dù TRY_CAST() hàm thường có thể được sử dụng để trả về NULL thay vì một lỗi, điều đó không áp dụng cho lỗi cụ thể này.

Khi chuyển đổi không thành công do chuyển đổi không được phép, thì ngay cả TRY_CAST() (và TRY_CONVERT() ) sẽ trả về một lỗi.

Giải pháp

Để khắc phục điều này, bạn cần thay đổi loại ban đầu hoặc loại đích (hoặc cả hai).

Nếu bạn đang chuyển một cột, hãy kiểm tra xem bạn đã chọn đúng cột chưa. Tương tự nếu bạn đang chuyển một biến - hãy kiểm tra xem đó có phải là biến phù hợp hay không.

Ví dụ:chuyển đổi sau thành công:

SELECT CAST('{a:10}' AS xml);

Kết quả:

{a:10}

Và sau đây cũng thành công:

SELECT CAST(10 AS char(2));

Kết quả:

10

Tùy thuộc vào giá trị thực tế, bạn có thể thử chuyển đổi giá trị ban đầu thành loại được chấp nhận.

Ví dụ:chúng tôi có thể thay đổi mã tạo lỗi XML ban đầu của mình thành mã tạo lỗi không xảy ra sau:

SELECT CAST(CAST(10 AS varchar) AS xml);

Kết quả:

10

Trong trường hợp này, thao tác không xác thực rằng kết quả có phải là tài liệu XML hợp lệ hay không. Nó chỉ đơn giản là chuyển đổi giá trị ban đầu thành xml loại.

Tuy nhiên, điều này có thể không phải lúc nào cũng hiệu quả, tùy thuộc vào giá trị bạn đang cố gắng chuyển đổi. Ví dụ:ví dụ về ngày tháng của chúng tôi vẫn tạo ra lỗi (mặc dù là một lỗi khác):

SELECT CAST(CAST(10 AS varchar) AS date);

Kết quả:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

Trong trường hợp này, chúng tôi nhận được lỗi Msg 241, đây là một lỗi khác. Trong trường hợp này, lỗi không phải do việc chuyển đổi không được phép. Đó là do giá trị thực tế gây ra vấn đề. Trong trường hợp của chúng tôi, SQL Server không thể chuyển đổi số 10 thành một ngày hợp lệ. Chúng tôi sẽ cần thay đổi giá trị đầu vào thành một giá trị có ý nghĩa hơn đại diện cho một ngày hợp lệ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lý do nên nâng cấp lên SQL Server 2017

  2. Điều gì làm cho một câu lệnh SQL có thể phân loại được?

  3. Phạm vi của các bảng tạm thời trong SQL Server

  4. Cách chuyển một biến null sang một Thủ tục được Lưu trữ trong SQL từ mã C # .net

  5. cú pháp cho MERGE hàng đơn / upert trong SQL Server