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

Phân tích cú pháp XML - Ký tự XML không hợp lệ (khi thực thi thủ tục được lưu trữ, việc chạy các truy vấn thủ tục không dẫn đến lỗi)

Phỏng đoán thuần túy:

  • Tệp là utf-8 được mã hóa (hoặc bất kỳ mã hóa nào khác, SQL-Server 2008 không thể đọc nguyên bản).
    • Bạn phải biết rằng SQL-Server khá hạn chế với các mã hóa tệp. CHAR (hoặc VARCHAR ) là extended ASCII 1-byte encodingNCHAR (hoặc NVARCHAR ) là UCS-2 2-byte encoding (gần giống với UTF-16 ).
    • Với SQL-Server 2016 (và SP2 cho v2014), một số hỗ trợ khác đã được giới thiệu, đặc biệt là cho utf-8 .
    • Cố gắng mở XML của bạn bằng một trình chỉnh sửa thích hợp (ví dụ:notepad ++) và cố gắng tìm ra mã hóa của tệp. Cố gắng lưu mã này thành "unicode / UCS-2 / utf-16" và thử nhập lại.
    • Cố gắng sử dụng tính năng nhập của bạn với CLOB thay vì BLOB . Đọc tệp dưới dạng nhị phân LargeObject sẽ lần lượt lấy các byte. SQL-Server sẽ cố gắng đọc các byte này dưới dạng chuỗi với kích thước cố định cho mỗi ký tự. Một ký tự LOB có thể hoạt động trong những trường hợp đặc biệt.
    • Kiểm tra hai byte đầu tiên để tìm BOM (dấu thứ tự byte)
  • Có một số bụi bẩn trong XML của bạn
    • Mở tệp bằng trình chỉnh sửa HEX và cố gắng tìm các mã lạ
  • Mã của bạn xử lý nội dung của tệp trong một câu lệnh được tạo động.
    • Trong những trường hợp như vậy, đôi khi bạn gặp phải dấu ngoặc kép hoặc ngắt chuỗi
  • Gợi ý chung:
    • Nếu bạn nhập dữ liệu và gặp sự cố, bạn nên sử dụng phương pháp tiếp cận 2 bước
    • Đọc tệp của bạn vào một bảng dàn khoan dung sai (với NVARCHAR(MAX) hoặc thậm chí VARBIANRY(MAX) mục tiêu) và cố gắng tiếp tục với điều này.
    • Có thể cần sử dụng một công cụ khác để thay đổi tệp của bạn trước khi nhập.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể xóa khỏi nhiều bảng trong cùng một câu lệnh SQL không?

  2. Khuyến nghị sử dụng bảng tạm thời hoặc biến bảng trong Khung thực thể 4. Cập nhật khung Thực thể hiệu suất

  3. Vấn đề với so sánh SQL và giá trị null

  4. Truy vấn cực kỳ chậm trong mã nhưng nhanh trong SSMS

  5. Pivot động cần thiết với Row_Number ()