IDENTITY_INSERT को बंद पर सेट किया गया है - इसे कैसे चालू करें?


112

मेरे पास एक हटाई गई फ़ाइल संग्रह डेटाबेस है जो उस फ़ाइल की आईडी को संग्रहीत करता है जिसे हटा दिया गया था, मैं चाहता हूं कि व्यवस्थापक फ़ाइल को पुनर्स्थापित करने में सक्षम हो (साथ ही साथ फ़ाइलों को लिंक करने के लिए समान आईडी)। मैं पूरी तालिका से आइडेंटीफाइनर नहीं लेना चाहता, क्योंकि वेतन वृद्धि एक काम करता है। मेरी प्रविष्टि को TBL_Contentस्टोर करने की प्रक्रिया में मेरे पास कुछ ऐसा है

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

लेकिन मुझे वही त्रुटि मिलती रही:

IDENTITY_INSERT को बंद पर सेट करने पर तालिका 'TBL_Content' में पहचान कॉलम के लिए स्पष्ट मूल्य नहीं डाला जा सकता।

कोई मदद?

जवाबों:


174

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

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

SET IDENTITY_INSERT tbl_content ON

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

16

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

ऐशे ही:

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

14

मेरा मानना ​​है कि इसे एक एकल क्वेरी बैच में किया जाना चाहिए। मूल रूप से, GO स्टेटमेंट्स आपकी कमांड्स को कई बैचों में तोड़ रहे हैं और यह समस्या पैदा कर रहा है। इसे इसमें बदलें:

SET IDENTITY_INSERT tbl_content ON
/* GO */

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO

1
आप सही। यह सही बात है! सम्मिलित करने के लिए अगला कमांड बैच सेट IDENTITY_INSERT tbl_content ON से शुरू होना चाहिए; फिर से आज्ञा।
जेट्टेरो

9

अनुस्मारक

SQL सर्वर केवल एक तालिका 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


4

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

SET IDENTITY_INSERT tbl_content ON

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.