Đặt Lại Giá Trị Của Trường IDENTITY

Vũ Huy Tâm

Khi bạn TRUNCATE bảng, trường IDENTITY sẽ được reset trở về giá trị ban đầu (khi tạo bảng). Tuy nhiên có những trường hợp bạn không thể dùng TRUNCATE (xem thêm bài DELETE và TRUNCATE). Ví dụ bạn muốn đặt lại giá trị của trường IDENTITY trong bảng dbo.TableName về 1, bạn có thể dùng lệnh này:

DBCC CHECKIDENT ('dbo.TableName', RESEED, 1)



Tags: , , , ,

4 Comments
Posted on 4/5/2010 | Categories: IDENTITY

Các bài viết tương tự

Comments
  • vqt (09/05/2010 7:37 pm)

    Hình như lệnh này chỉ có trong SQL phiên bản 2005 trở về sau.

  • vuht2000 (10/05/2010 6:35 am)

    Chào bạn,

    Lệnh này đã có trong bản 2000. Trước đó nữa thì tôi không rõ

  • chip07 (07/07/2011 10:47 pm)

    Cái lệnh này là bản ghi tiếp theo được insert vào sẽ có ID = 2 này (^_^)

  • chip07 (07/07/2011 11:09 pm)

    Đọc lại thấy comment cụt lủn quá, ko mang tính xây dựng, vậy nên xin phép viết thêm mấy dòng (^_^). Đây là kinh nghiệm thực tế mình làm, hok biết giải thích vì sao:

    create table vd (id bigint identity(1,1), ma nvarchar(50))

    – Đây là trường hợp bình thường này, khai báo IDENTITY(1,1) và kết quả là ID = 1
    insert into vd (ma)
    values (‘a’), (‘b’), (‘c’)

    select * from vd

    delete from vd

    – trường hợp này là sau khi đã có dữ liệu, DELETE dữ liệu rồi, lúc này nếu RESEED = 1, thì giá trị mới thêm vào sẽ là ID = 2 (nếu RESEED = 0, thì ID = 1)
    dbcc checkident (‘vd’, reseed, 1)

    insert into vd (ma)
    values (‘a’), (‘b’), (‘c’)

    select * from vd

    delete from vd

    dbcc checkident (‘vd’, reseed, 0)

    insert into vd (ma)
    values (‘a’), (‘b’), (‘c’)

    select * from vd

    drop table vd

    – Còn đây là trường hợp tạo bảng với khai báo IDENTITY(1,1), nếu chưa có bản ghi nào mà mình đã dùng lệnh DELETE, Kết quả là ID = 0
    – trường hợp này thường xảy ra khi ta xóa gần như tất cả các bảng trong csdl (dùng lệnh để xóa cho nhanh, tạo một csdl empty).
    – với bảng nào đã từng có dữ liệu rồi thì ID = 1,
    – với bảng nào chưa từng có dữ liệu thì ID = 0
    create table vd (id bigint identity(1,1), ma nvarchar(50))
    create table vd2 (id bigint identity(1,1), ma nvarchar(50))

    insert into vd (ma)
    values (‘a’), (‘b’), (‘c’)

    delete from vd
    delete from vd2

    dbcc checkident (‘vd’, reseed, 0)
    dbcc checkident (‘vd2′, reseed, 0)

    insert into vd (ma)
    values (‘a’), (‘b’), (‘c’)

    insert into vd2 (ma)
    values (‘d’), (‘e’), (‘f’)

    select * from vd
    select * from vd2

    drop table vd
    drop table vd2

Leave a Reply

Hướng dẫn: Để nhập mã T-SQL bạn dùng thẻ <pre lang="tsql"> và </pre>.
Ví dụ: <pre lang="tsql">SELECT * FROM MyTable</pre>