Thứ Ba, 26 tháng 5, 2015

SQL - Bài 7: Cột đồng nhất trong SQL Server

Nếu một cột được đánh dấu là cột đồng nhất, thì những giá tị của cột đó sẽ được phát sinh tự động, khi bạn chèn một dòng mới vào bảng. Sau đây, tạo dấu bảng báo cáo PersonId như là một cột đông nhất với gốc = 1 và giá trị đồng nhất là 1. Gốc và những giá trị gia tăng là tuy chọn. Nếu bạn không xác đinh chúng thì mặc định chúng sẽ bằng 1.

Create Table tblPerson
(
PersonId int Identity(1,1) Primary Key,
Name nvarchar(20)
)

Trong 2 câu lệnh Insert dưới đây, chúng ta chỉ thêm vào cột Name và không động tới cột PersonId.
Insert into tblPerson values ('Sam')
Insert into tblPerson values ('Sara')

Nếu bạn chọn tất cả các hàng từ tblPerson table, bạn sẽ nhìn thấy các dòng 'Sam' and 'Sara' có PersondId là 1 và 2.

Bây giờ, nếu tôi cố gắng thực thi theo truy vấn sau, tôi có một lỗi xảy ra  An explicit value for the identity column in table 'tblPerson' can only be specified when a column list is used and IDENTITY_INSERT is ON. 

Insert into tblPerson values (1,'Todd')

Như vậy nếu bạn đánh dấu một cột là identity column, bạn không cần phải cung cấp 1 giá trị nào đó cho cột khi bạn insert một dòng mới. Những giá trị đó sẽ tự động đươc tính toán và cung cấp bởi SQL server. Như vậy, insert 1 dòng vào bảng tblPerson , chỉ cần cung cấp giá trị của cột Name
Insert into tblPerson values ('Todd')

Xóa hàng mà bạn vừa chèn vào và chèn vào một dòng khác. Bạn thấy đấy, giá trị của PersonId giờ là 2. Bây giờ chèn thêm một dòng kahcs, PersonId bằng 3. Một bản ghi với PersonId là 1 nó không tồn tại và giờ tôi muốn lấp đầy khoảng trống này. Để làm được điều này, chúng ta sẽ cung cấp một cách rỏ ràng giá trị cho cột đồng nhất.
1. Đầu tiên bật indentity insert lên - SET Identity_Insert tblPerson ON
2. Trong câu truy vấn Insert chỉ đích danh cột
 Insert into tblPerson(PersonId, Name) values(2, 'John')

Chừng nào mà Identity_Insert đang bật trên một bảng, bạn cần xác định chính xác giá trị cung cấp cho cột. Nếu không xác định chính xác giá trị, sẽ có lỗi:  Explicit value must be specified for identity column in table 'tblPerson1' either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column. 

Sau đó, bạn lấp đầy các khoảng trống trên cột đồng nhất, và bạn biết rằng SQL server có thể tính toán giá trị, tắt Identity_Insert
SET Identity_Insert tblPerson OFF

Nếu bạn xóa tất cả các dòng trong 1 bảng, và bạn muốn reset giá trị cột Identity, sử dụng câu lệnh DBCC CHECKIDENT. Câu lệnh này sẽ reset lại cột đồng nhất PersonId
DBCC CHECKIDENT(tblPerson, RESEED, 0)

Không có nhận xét nào:

Đăng nhận xét