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

Sự cố chuyển đổi kiểu SQL Server lạ

Điều này hoàn toàn có thể dự đoán và được mong đợi vì Ưu tiên kiểu dữ liệu

Đối với điều này, cột giao diện người dùng sẽ được thay đổi thành số thập phân (25,0)

where UI = 2011040773395012950010370

Điều này gần như chính xác. Phía bên tay phải là varchar và được đổi thành nvarchar

where UI = '2011040773395012950010370'

Đây là thực sự đúng phiên bản trong đó cả hai loại đều giống nhau

where UI = N'2011040773395012950010370'

Lỗi sẽ bắt đầu xảy ra vì cột giao diện người dùng hiện chứa giá trị không CAST thành số thập phân (25,0).

Một số lưu ý không liên quan:

  • nếu bạn có một chỉ mục trên cột Giao diện người dùng, nó sẽ bị bỏ qua trong phiên bản đầu tiên vì yêu cầu CAST ngầm định
  • bạn có cần unicode để lưu trữ các chữ số không? Có một chi phí nghiêm trọng với các loại dữ liệu unicode trong lưu trữ và hiệu suất
  • tại sao không sử dụng char(25) hoặc nchar(25) là giá trị luôn luôn cố định độ dài? Các truy vấn của bạn sử dụng quá nhiều bộ nhớ như một người tối ưu hóa giả định độ dài trung bình là 128 ký tự dựa trên nvarchar(256)

Chỉnh sửa, sau khi nhận xét

Đừng cho rằng "tại sao đôi khi nó hoạt động" khi bạn không biết rằng nó hoạt động

Ví dụ:

  • Giá trị có thể đã bị xóa sau đó được thêm vào sau
  • Mệnh đề ĐẦU hoặc TÀI KHOẢN ĐẶT có thể có nghĩa là không đạt được giá trị vi phạm
  • Truy vấn không bao giờ được chạy nên không thể thất bại
  • Một số mã khác vẫn bỏ qua lỗi?

Chỉnh sửa 2 để hy vọng rõ ràng hơn

Trò chuyện

gbn:

Ngẫu nhiên:

gbn

Như Tao đã đề cập , điều quan trọng là phải hiểu rằng một truy vấn khác không liên quan có thể phá vỡ truy vấn ngay cả khi truy vấn này ổn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mã hóa bảng cơ sở dữ liệu trong SQL Server 2008

  2. Gọi đến hàm không xác định sqlsrv_connect () - Khắc phục sự cố

  3. Không thể so sánh hoặc sắp xếp các loại dữ liệu văn bản, ntext và hình ảnh, ngoại trừ khi sử dụng toán tử IS NULL hoặc LIKE>

  4. Tạo một ngày từ tháng và năm với T-SQL

  5. điều kiện if-else để cập nhật bảng trong một thủ tục được lưu trữ trong SQL Server 2005