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.