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

SQL Identity với các số không có đệm ở đầu

Như những người khác đã chỉ ra một cách đúng đắn - INT không bao giờ có các số 0 đứng đầu - nó chỉ giữ giá trị, vậy thôi (và điều đó tốt theo cách đó).

Nếu bạn cần một số định dạng bổ sung, bạn luôn có thể thêm một cột được tính toán vào bảng của mình, chẳng hạn như:

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber AS  RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

Bằng cách này, INT IDENTITY của bạn sẽ được sử dụng làm INT và luôn chứa giá trị số, trong khi DisplayNumber chứa 001, 002, ... 014, 015, ..... v.v. - tự động, luôn cập nhật.

Vì đây là một trường tồn tại lâu dài, nên giờ đây nó là một phần của bảng của bạn và bạn có thể truy vấn trên đó và thậm chí đặt một chỉ mục vào đó để thực hiện các truy vấn nhanh hơn:

SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'

Và tất nhiên, bạn có thể chỉ sử dụng bất kỳ định dạng nào trong định nghĩa của cột được tính toán của mình, vì vậy bạn cũng có thể thêm tiền tố hoặc thứ gì đó:

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber 
      AS  'ABC-' + RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

Vì vậy, trong trường hợp này, DisplayNumber của bạn sẽ là ABC-001, ABC-002, ... và như vậy.

Bạn có được lợi ích tốt nhất của cả hai thế giới - bạn giữ INT IDENTITY của mình là số và được SQL Server tự động tăng lên, đồng thời bạn có thể xác định định dạng hiển thị theo bất kỳ cách nào bạn thích và luôn có sẵn định dạng đó bất kỳ lúc nào.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tránh 4 sai lầm DBA phổ biến này

  2. Cách liên kết cơ sở dữ liệu Access với SQL Server trong Access 2016

  3. Triển khai nhanh ứng dụng Visual Studio 2010 với cơ sở dữ liệu SQL

  4. Cách thêm tệp dữ liệu vào cơ sở dữ liệu máy chủ SQL (T-SQL)

  5. Bảng tổng hợp và các cột nối