2010-06-24 31 views
68

Tôi có một cơ sở dữ liệu lưu trữ tệp đã xóa lưu trữ ID của tệp đã bị xóa, tôi muốn quản trị viên có thể khôi phục tệp (cũng như cùng một ID để liên kết tệp). Tôi không muốn lấy identity_insert ra khỏi toàn bộ bảng, vì sự gia tăng của một tác phẩm tuyệt vời. Trong chèn của tôi để TBL_Content thủ tục cửa hàng tôi có một cái gì đó như thế nàyIDENTITY_INSERT được đặt thành TẮT - Cách BẬT?

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
SET IDENTITY_INSERT tbl_content ON 
GO 

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent] 
@ContentID int, 
...insert command... 
SET IDENTITY_INSERT tbl_content OFF 

Nhưng tôi vẫn gặp lỗi tương tự:

Cannot insert explicit value for identity column in table 'TBL_Content' when IDENTITY_INSERT is set to OFF.

Bất kỳ sự giúp đỡ?

Trả lời

108

nên bạn thay vì được thiết lập chèn sắc để vào trong thủ tục lưu trữ? Có vẻ như bạn đang thiết lập nó chỉ khi thay đổi quy trình được lưu trữ, chứ không phải khi thực sự gọi nó. Hãy thử:

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent] 
@ContentID int, 

SET IDENTITY_INSERT tbl_content ON 

...insert command... 

SET IDENTITY_INSERT tbl_content OFF 
GO 
9

Tôi tin rằng nó cần được thực hiện trong một loạt truy vấn đơn lẻ. Về cơ bản, các câu lệnh GO đang phá vỡ các lệnh của bạn thành nhiều lô và điều đó gây ra vấn đề. Thay đổi nó thành:

SET IDENTITY_INSERT tbl_content ON 
/* GO */ 

...insert command... 

SET IDENTITY_INSERT tbl_content OFF 
GO 
+1

Bạn đúng. Đây là điểm! Hàng loạt lệnh tiếp theo để chèn phải bắt đầu bằng SET IDENTITY_INSERT tbl_content ON; lệnh một lần nữa. – Jettero

15

Bạn không nên đặt identity_Insert ON, chèn các bản ghi và sau đó tắt nó đi?

Như thế này:

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
SET IDENTITY_INSERT tbl_content ON 
GO 

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent] 
@ContentID int, 
SET IDENTITY_INSERT tbl_content ON 
...insert command... 
SET IDENTITY_INSERT tbl_content OFF 
3

Thêm dòng này phía trên bạn Truy vấn

SET IDENTITY_INSERT tbl_content ON 
9

Reminder

SQL Server chỉ cho phép một bảng để có tài sản IDENTITY_INSERT thiết lập để ON.

này không hoạt động:

SET IDENTITY_INSERT TableA ON 
SET IDENTITY_INSERT TableB ON 
... INSERT ON TableA ... 
... INSERT ON TableB ... 
SET IDENTITY_INSERT TableA OFF 
SET IDENTITY_INSERT TableB OFF 

Thay vào đó:

SET IDENTITY_INSERT TableA ON 
... INSERT ON TableA ... 
SET IDENTITY_INSERT TableA OFF 
SET IDENTITY_INSERT TableB ON 
... INSERT ON TableB ... 
SET IDENTITY_INSERT TableB OFF 
Các vấn đề liên quan