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

SQL Server:Thay thế các ký tự XML không hợp lệ từ trường VARCHAR (MAX)

Có một mẹo sử dụng chuyển đổi ngầm định của VARBINARY đến base64 trở lại:

Đây danh sách điều ác của bạn

  DECLARE @evilChars VARCHAR (MAX) =CHAR (0x0) + CHAR (0x1) + CHAR (0x2) + CHAR (0x3) + CHAR (0x4) + CHAR (0x5) + CHAR (0x6) + CHAR (0x7) + CHAR (0x8) + CHAR (0x9) + CHAR (0xa) + CHAR (0xb) + CHAR (0xc) + CHAR (0xd) + CHAR (0xe) + CHAR (0xf) + CHAR (0x10) + CHAR (0x11) + CHAR (0x12) + CHAR (0x13) + CHAR (0x14) + CHAR (0x15) + CHAR (0x16) + CHAR (0x17) + CHAR (0x18) + CHAR (0x19) + CHAR (0x1a) + CHAR (0x1b) + CHAR (0x1c) + CHAR (0x1d) + CHAR (0x1e) + CHAR (0x1f) + CHAR (0x7f);  

Điều này hoạt động

  DECLARE @XmlAsString NVARCHAR (MAX) =(SELECT @evilChars FOR XML PATH ('test')); SELECT @XmlAsString;  

Kết quả (một số được "in")

   &# x00; &# x01; &# x02; &# x03; &# x04; &# x05; &# x06; &# x07; &# x08; &# x0B; &# x0C; &# x0D; &# x0E; &# x0F; &# x10; &# x11; &# x12; &# x13; &# x14; &# x15; &# x16; &# x17; &# x18; &# x19; &# x1A; &# x1B; &# x1C; &# x1D; &# x1E; &# x1F;   

Những điều sau đây bị cấm

  CHỌN CAST (@XmlAsString AS XML)  

Nhưng bạn có thể sử dụng chuyển đổi ngầm định của VARBINARY thành base64

  DECLARE @ base64 NVARCHAR (MAX) =(SELECT CAST (@evilChars AS VARBINARY (MAX)) FOR XML PATH ('test')); SELECT @ base64;  

Kết quả

   AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh9 /   

Bây giờ bạn đã có XML thực của mình bao gồm các ký tự đặc biệt !

  SELECT CAST (CAST (@ base64 AS XML) .value ('/ test [1]', 'varbinary (max)') AS VARCHAR (MAX)) FOR XML PATH ('đã chuyển đổi lại')  

Kết quả

<được đảo ngược> &# x0; &# x1; &# x2; &# x3; &# x4; &# x5; &# x6; &# x7; &# x8; &# xB; &# xC; &# xE; &# xF; &# x10; &# x11; &# x12; &# x13; &# x14; &# x15; &# x16; &# x17; &# x18; &# x19; &# x1A; &# x1B; &# x1C; &# x1D; &# x1E; &# x1F;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tối ưu hóa TempDB:Tránh tắc nghẽn và các vấn đề về hiệu suất

  2. Giới thiệu về các hàm có giá trị bảng nội tuyến (ITVF) trong SQL Server

  3. Truy vấn hoạt động tối ưu cho bản ghi mới nhất cho mỗi N

  4. Cách trả về một chuỗi con từ một chuỗi trong SQL Server bằng cách sử dụng hàm SUBSTRING ()

  5. Cú pháp nối nào tốt hơn?