2010-06-24 9 views
68

मेरे पास एक हटाए गए फ़ाइल संग्रह डेटाबेस है जो हटाए गए फ़ाइल की आईडी संग्रहीत करता है, मैं चाहता हूं कि व्यवस्थापक फ़ाइल को पुनर्स्थापित करने में सक्षम हो (साथ ही फ़ाइलों को जोड़ने के लिए एक ही आईडी)। मैं पूरी तालिका से पहचान_इनर्ट नहीं लेना चाहता, क्योंकि एक काम बढ़ता है। TBL_Content दुकान प्रक्रिया करने के लिए अपने डालने में मैं इसIDENTITY_INSERT बंद करने के लिए सेट है - इसे चालू कैसे करें?

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 

की तरह कुछ है लेकिन मैं हो रही है वही त्रुटि रखें:

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

किसी भी मदद की?

उत्तर

108

आप के बजाय पहचान डालने पर करने के लिए संग्रहीत प्रक्रिया के भीतर की स्थापना किया जाना चाहिए? ऐसा लगता है कि आप इसे संग्रहीत प्रक्रिया को बदलते समय ही सेट कर रहे हैं, वास्तव में इसे कॉल करते समय नहीं। प्रयास करें:

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

SET IDENTITY_INSERT tbl_content ON 

...insert command... 

SET IDENTITY_INSERT tbl_content OFF 
GO 
9

मुझे विश्वास है कि इसे एक क्वेरी बैच में किया जाना चाहिए। असल में, जाओ विवरण आपके आदेशों को कई बैचों में तोड़ रहे हैं और इससे समस्या उत्पन्न हो रही है। इसे इस पर बदलें:

SET IDENTITY_INSERT tbl_content ON 
/* GO */ 

...insert command... 

SET IDENTITY_INSERT tbl_content OFF 
GO 
+1

आप सही। यह सही बात है! सम्मिलित करने के लिए अगला कमांड बैच SET IDENTITY_INSERT tbl_content चालू होना चाहिए; फिर से आदेश। – Jettero

15

क्या आप पहचान स्थापित नहीं कर रहे हैं, रिकॉर्ड दर्ज करना और फिर इसे वापस बंद करना चाहिए?

इस तरह

:

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

आप इस पंक्ति को ऊपर जोड़ें प्रश्न

SET IDENTITY_INSERT tbl_content ON 
9

अनुस्मारक

एसक्यूएल सर्वर केवल एक मेज की अनुमति देता है identity_insert संपत्ति पर सेट है।

यह काम नहीं करता है:

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 
इसके बजाय

:

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 
संबंधित मुद्दे