2013-02-25 36 views
8

Tôi muốn thiết lập tài sản của một cột để tắt là danh tính và sau khi chèn một giá trị rõ ràng thiết lập nó để trên again.I've viết truy vấn này:Thiết nhận dạng để bật hoặc tắt trong SQL server

SET IDENTITY_INSERT Tbl_Cartoons OFF 

Mặc dù nó thực thi thành công, không có gì thay đổi trong thiết kế bảng. Vui lòng đề xuất giải pháp, Điều đó thực sự quan trọng.

Trả lời

5

Tất cả các dòng bạn đã cung cấp là vô hiệu hóa danh tính để bạn có thể chèn các giá trị cụ thể vào cột nhận dạng của mình - thường là điều cần thiết cho một lần như di chuyển dữ liệu xung quanh. Danh tính vẫn còn đó trên cột, nó chỉ không bị tác động. Về mặt khái niệm, điều này tương tự như sự khác biệt giữa việc vô hiệu hóa và xóa trình kích hoạt.

Để loại bỏ danh tính khỏi cột hoàn toàn khó hơn. The question covers it, nhưng ý tưởng cơ bản là bạn phải tạo cột mới, sao chép dữ liệu, sau đó xóa cột nhận dạng.

+0

Cảm ơn rất nhiều ... –

6

Phiên mà đặt SET IDENTITY_INSERT được phép nhập giá trị rõ ràng.

Nhưng cột vẫn là cột nhận dạng. Chỉ là phiên của bạn có thể bỏ qua ràng buộc danh tính.

1

Đặt identity_insert để có thể đặt giá trị của cột id một cách rõ ràng. Đặt lại lần nữa để tự động chỉ định.

22

Bạn thực sự muốn sử dụng SET IDENTITY_INSERT Tbl_Cartoons ON trước khi cố chèn giá trị rõ ràng.

Bạn đang nói rằng "I am sẽ chịu trách nhiệm chèn các giá trị vào cột IDENTITY".

SET IDENTITY_INSERT Tbl_Cartoons OFF nói "Tôi sẽ để hệ thống chịu trách nhiệm về việc chèn giá trị vào cột IDENTITY".

11

Để chèn các giá trị rõ ràng vào cột sắc, làm như sau:

SET IDENTITY_INSERT Tbl_Cartoons ON 
GO 

-- code to insert explicit ID values 

SET IDENTITY_INSERT Tbl_Cartoons OFF 
GO 
0

Bạn thể tắt thuộc tính Identity, nhưng nó liên quan đến bảng hệ thống chỉnh sửa mà không được xem là một thực hành tốt. Bạn cũng không có khả năng có các quyền cần thiết, và có lẽ sẽ thấy You do not have permission to run the RECONFIGURE statement cố gắng đoạn mã sau:

DECLARE @tableName nvarchar(128) = 'YourTable'; 

-- Get a list of identity columns (informational) 
SELECT OBJECT_NAME(object_id) tableName, sc.name colName, st.name dataType 
FROM sys.columns sc 
JOIN sys.types st 
    ON st.system_type_id = sc.system_type_id 
WHERE sc.is_identity = 1 
AND OBJECT_NAME(object_id) = @tableName 

-- Allow ad-hoc changes to system catalogs 
EXEC sp_configure 'allow update', 1 
GO 
reconfigure with override 
GO 
-- Eliminate the identityness 
UPDATE syscolumns SET colstat = colstat - 1 
WHERE id = object_id(@tableName) 
AND name = 'Id' -- Specify column if you like, though only one identity per table is currently supported 
GO 
-- Unallow ad-hoc changes to system catalogs 
exec sp_configure 'allow update', 0 
GO 
reconfigure with override 
GO 
Các vấn đề liên quan