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

Tại sao ép kiểu / chuyển đổi từ int trả về dấu hoa thị

Để thú vị hơn nữa, hãy thử cái này:

DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS VARCHAR(2)) -- result: '*'
go

DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS NVARCHAR(2)) -- result: Arithmetic overflow error

:)

Câu trả lời cho truy vấn của bạn là:"Lý do lịch sử"

Các kiểu dữ liệu INT và VARCHAR cũ hơn BIGINT và NVARCHAR. Nhiều lớn hơn. Trên thực tế, chúng ở bản gốc Thông số kỹ thuật SQL. Ngoài ra, cách tiếp cận loại bỏ ngoại lệ cũng cũ hơn là thay thế đầu ra bằng dấu hoa thị.

Sau đó, những người sử dụng SQL quyết định rằng việc ném ra một lỗi sẽ tốt hơn / nhất quán hơn, v.v. so với việc thay thế các chuỗi đầu ra không có thật (và thường gây nhầm lẫn). Tuy nhiên, vì lợi ích nhất quán, họ đã giữ lại hành vi trước đó cho các kết hợp loại dữ liệu đã có từ trước (để không phá vỡ mã hiện có).

Vì vậy, (nhiều) sau này khi các kiểu dữ liệu BIGINT và NVARCHAR được thêm vào, chúng có hành vi (er) mới vì chúng không được bao phủ bởi grandfathering được đề cập ở trê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. Tham số tên bảng trong .NET / SQL?

  2. Kiểm tra không gian được sử dụng bởi một bảng trong SQL Server

  3. Sử dụng đám mây Spotlight để giải quyết việc chặn máy chủ SQL

  4. Kiểm tra tình trạng máy chủ SQL chủ động, Phần 2:Bảo trì

  5. SQL Server:kết hợp nhiều hàng thành một hàng