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

Cách chèn giá trị vào cột IDENTITY trong SQL Server

Nếu bạn đã từng cố gắng chèn giá trị vào cột nhận dạng trong SQL Server, bạn có thể gặp lỗi như sau:

Không thể chèn giá trị rõ ràng cho cột nhận dạng trong bảng 'Nghệ sĩ' khi IDENTITY_INSERT được đặt thành TẮT.

Điều này là bình thường. Một cột danh tính ở đó là có lý do. Nó tự động điền vào cột với giá trị tăng dần cho mỗi hàng được chèn. Do đó, bạn không cần phải chèn giá trị vào cột đó.

Tuy nhiên, đôi khi bạn do cần phải chèn một giá trị vào một cột nhận dạng. Ví dụ:bạn có thể đưa vào cơ sở dữ liệu những dữ liệu cần giữ lại các giá trị nhận dạng riêng của nó. Nếu đúng như vậy, bạn cần ghi đè IDENTITY bất động sản. Đây là cách thực hiện.

Bật IDENTITY_INSERT

Bạn có thể ghi đè IDENTITY bằng cách bật IDENTITY_INSERT . Điều này cho phép bạn chèn các giá trị của riêng mình vào cột nhận dạng.

Đây là một ví dụ:

SET IDENTITY_INSERT Artists ON;
INSERT INTO Artists (ArtistId, ArtistName, ActiveFrom)   
VALUES 
  (1001, 'AC/DC','1973-01-11'), 
  (1002, 'Allan Holdsworth','1969-01-01'),
  (1003, 'Buddy Rich','1919-01-01');
SET IDENTITY_INSERT Artists OFF;

Trong ví dụ này, bảng Nghệ sĩ có một cột danh tính (trong trường hợp này, ArtistId là cột danh tính). Để ghi đè IDENTITY thuộc tính chúng ta chỉ cần đặt trước INSERT câu lệnh với SET IDENTITY_INSERT Artists ON . Câu lệnh T-SQL này cho phép bạn nói “Tôi biết bảng này có cột nhận dạng nhưng trong trường hợp này, hãy chèn của tôi các giá trị thay thế ”.

Lưu ý rằng IDENTITY_INSERT chỉ có thể được bật trên một bảng tại một thời điểm. Do đó, bạn nên tắt IDENTITY_INSERT ngay sau khi chèn. Thao tác này sẽ đưa nó trở lại trạng thái ban đầu và nó cho phép bạn ghi đè cột nhận dạng trên một bảng khác nếu được yêu cầu.

Ngoài ra, để bật IDENTITY_INSERT người dùng phải sở hữu bảng hoặc có ALTER quyền trên bảng.

Sao chép giữa các bảng

Đang bật IDENTITY_INSERT cũng có thể hữu ích khi bạn sao chép dữ liệu giữa các bảng. Ví dụ:bạn có thể điền một bảng từ một bảng khác.

Dưới đây là ví dụ về việc sao chép dữ liệu từ bảng Artists sang bảng Artists_Archive:

SET IDENTITY_INSERT Artists_Archive ON;
INSERT INTO Artists_Archive (ArtistId, ArtistName, ActiveFrom)
  SELECT ArtistId, ArtistName, ActiveFrom
	FROM Artists;
SET IDENTITY_INSERT Artists_Archive OFF;

Một điều cần lưu ý là, nếu cột nhận dạng có ràng buộc khóa chính, nó sẽ từ chối bất kỳ giá trị nào đã tồn tại trong bảng đích. Vì vậy, bạn cần hoàn toàn chắc chắn rằng việc ghi đè cột nhận dạng là điều bạn chắc chắn muốn làm.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy ngày ở định dạng YYYY-MM-DD từ trường ngày giờ TSQL?

  2. Làm thế nào để chèn các ký tự Ả Rập vào cơ sở dữ liệu SQL?

  3. Gọi một API từ thủ tục được lưu trữ của SQL Server

  4. SQL Server:xoay động trên 5 cột

  5. 13 phương pháp hay nhất về bảo mật SQL Server