HomeSQL Server

Đặt lại giá trị identity trong SQL Server

Đặt lại giá trị identity trong SQL Server
Like Tweet Pin it Share Share Email

Giới thiệu về giá trị identity

Cột Identity là cột có giá trị tự tăng trong SQL Server. Đối với giá trị (values) của cột giá trị identity thì bạn không thể thao tác được, nhưng đôi khi bạn muốn dữ liệu “đẹp” chút xíu (ví dụ như dãy số tăng dần) thì khi đó bắt buộc bạn phải reset (đặt lại) giá trị identity từ 1 hoặc một số nào đó mà bạn thích, ví dụ như từ 10, 100, 200,… Hoặc nếu bạn xóa hết dữ liệu trong bảng đó thì khi thêm dòng dữ liệu mới giá trị identity vẫn không được đặt lại từ 1 mà sẽ tăng lên +1 đối với dòng dữ liệu cuối cùng được thêm vào.

Ví dụ dòng cuối cùng được thêm vào bảng có giá trị identity là 1000, thì cho dù bạn có xóa hết dữ liệu bảng đó đi và thêm dòng dữ liệu mới vào thì giá trị identity là 1001, chứ không phải là 1.

Ví dụ: Dữ liệu hiện tại gồm 3 dòng như hình 1: giá trị identity của ID_Product từ 1=> 3, nếu ta thêm một dòng dữ liệu mới thì giá trị identity mới của cột ID_Product sẽ là 4. Xem hình bên dưới để hiểu rõ nhé:

Đặt lại giá trị identity trong SQL Server

Hình 1: Dữ liệu ban đầu

Dữ liệu sau khi thêm vào dòng mới với “Name_Product” là “Product 4”, giá trị của cột ID_Product = 4

 

Đặt lại giá trị identity trong SQL Server

Hình 2: Dữ liệu sau khi thêm một dòng mới

Nhưng, nếu bạn xóa 2 dòng dữ liệu có ID_Product = 3 và = 4 đi thì lúc này dòng mới với Name_Product = “Product 5” thì dữ liệu được thêm vào vẫn có ID_Product là 5.

Đặt lại giá trị identity trong SQL Server

Hình 3: Dữ liệu sau khi xóa hai dòng và thêm một dòng mới

Hoặc sau khi xóa hết dữ liệu, giá trị identity vẫn chưa được đặt lại về 1:

Đặt lại giá trị identity trong SQL Server

Hình 4: Dữ liệu sau khi xóa hết và thêm một dòng mới

Lúc này, nếu bạn muốn dữ liệu của “Product 1” có ID_Product là 1 thì ta phải set (đặt lại) giá trị identity của cột này bằng 2 cách như sau.

Trước tiên, ta xóa hết dữ liệu của bảng này.

Cách 1: Dùng câu lệnh của sql server để đặt lại giá trị identity

Ta “New Query” trên thanh công cụ để tạo mới file soạn thảo

Đặt lại giá trị identity trong SQL Server

Hình 5: New Query trên thanh công cụ của SQL Server

Sau đó kết nối vào database (cơ sở dữ liệu) bạn muốn thao tác, và gõ lệnh checkident có cú pháp như sau:

DBCC CHECKIDENT (‘Product’, RESEED, 0)

Trong đó:

  • “Product” là bảng cần đặt lại giá trị identity.
  • “RESEEED” là từ khóa để đặt lại giá trị idenitty về giá trị mà ta mong muốn.
  • “0” là giá trị hiện tại là 0, và giá trị tiếp theo là 1.

Đặt lại giá trị identity trong SQL Server

Hình 6: Lệnh CHECKIDENT sau khi gõ trên database

Sau đó Execute lệnh này trong cửa số hiện tại, và lúc đó sẽ hiện lên thông báo thành công trong cửa sổ Messages (hình 6).

Đặt lại giá trị identity trong SQL Server

Hình 7: Thông báo reset giá trị identity thành công khi dùng câu lệnh CHECKIDENT

Thông báo này hiểu sơ sơ là “Dữ liệu hiện tại của cột ID_Product là 6, và cột giá trị identity đã được set về 1”.

Tuy nhiên, nếu chưa xóa dữ liệu mà reset cột giá trị identity lại thì SQL Server vẫn hiện thông báo thành công.

Trường hợp nếu ta chưa xóa dữ liệu dòng có ID_Product = 6, lúc này dữ liệu của dòng có ID_Product vẫn không đổi.

Đặt lại giá trị identity trong SQL Server

Hình 8: Dữ liệu sau khi dùng câu lệnh CHECKIDENT và thêm một vài dòng.

Lúc này khi ta thêm một dòng mới có dữ liệu “Product 2” vào, cột có giá trị identity vẫn sẽ tăng lên 2. Tương tự như thế với dữ liệu “Product 3”, “Product 4”, “Product 5”. Nhưng nếu mình thêm một dòng nữa với Name_Product = “Product 6 2” thì sẽ hiện thông báo lỗi trùng key như sau:

Đặt lại giá trị identity trong SQL Server

Hình 9: Thông báo lỗi trùng key

Lỗi này có thể ngầm hiểu là, giá trị identity hiện tại của Name_Product = “Product 5” là 5, nếu bạn thêm vào một dòng mới, giá trị tăng lên là 1 (+1), tức là 5+1= 6, và giá trị identity là 6 này đã có rồi (dòng đầu tiên trong hình nhé, Name_Product của ID_Product = 6 là “Product 6”).

Nếu chọn OK và nhập lại dữ liệu Name_Product thì lúc này cột ID_Product sẽ được tăng lên là 7, và khi đó ta thêm dữ liệu thành công.

Đặt lại giá trị identity trong SQL Server

Hình 10: Dữ liệu sau khi thêm giá trị identity thành công.

Cách 2: Dùng giao diện để đặt lại giá trị identity

Ta vào phần Design của table cần đặt lại giá trị identity, ở đây table của mình là Product. Sau đó ta chọn cột  có giá trị identity “ID_Product”, vào Column Properties, có thuộc tính Identity Spectfication.

Ta set 2 thuộc tính Identity IncrementIdentity Seed về 1. Sau đó lưu lại là OK.

Đặt lại giá trị identity trong SQL Server

Hình 11: Set lại giá trị identity bằng thuộc tính Column Properties

Trong 2 cách đặt lại giá trị identity trên, cách nào thuận tiện thì các bạn làm nhé. Mình thì mình dùng giao diện cho nhanh. Nếu có thắc mắc hay trao đổi gì thì comment bên dưới nhé.

Chúc các bạn thành công!

Comments (9)

Trả lời

Your email address will not be published. Required fields are marked *