Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Co to jest literał znaku zerowego w TSQL?

W odpowiedzi Cade Roux występują dwa różne zachowania:zastąpienie powiodło się (gdy używane jest sortowanie SQL) i nie powiodło się (stosowane jest sortowanie Windows). Powodem jest rodzaj użytego sortowania.

To zachowanie zostało zgłoszone firmie Microsoft prawie 4 lata temu:

P: Podczas próby zamiany znaku NUL na replace() działa to, gdy wartość ma sortowanie SQL, ale nie sortowanie Windows.

O: Wynika to z faktu, że 0x0000 jest niezdefiniowanym znakiem w zestawieniach Windows. Wszystkie niezdefiniowane znaki są ignorowane podczas porównywania, sortowania i dopasowywania wzorców. Tak więc szukanie „a” + char(0) to tak naprawdę wyszukiwanie „a”, a szukanie char(0) jest równoznaczne z pustym ciągiem.

Sposób obsługi niezdefiniowanych znaków jest nieco mylący, ale jest to sposób, w jaki Windows zdefiniował ich sortowanie, a SQL Server jest zgodny z ogólnym Windows API.

W zestawieniu SQL nie ma pojęcia niezdefiniowanego znaku. Każdy punkt kodowy ma przypisaną wagę, dlatego nie widzimy tam problemu.

ale niestety nadal nie jest udokumentowane.

Wydaje się więc, że jedynym rozwiązaniem jest zmiana sortowania na sortowanie SQL (np. SQL_Latin1_General_CP1_CI_AS może być również używany).

Usunąłem moją poprzednią odpowiedź jako niepotrzebną



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak możesz nazwać tabele zestawu danych, które zwracasz w przechowywanej procedurze?

  2. Zapytanie o najwyższej wydajności procesora SQL Server -1

  3. Aktualizacja platformy danych SQL Server w 2015 r.

  4. Piętro data w serwerze SQL

  5. Zdefiniuj kroki dla kursora SQL Server — samouczek SQL Server / TSQL