मैं किसी पुराने डेटाबेस से डेटा को परिवर्तित करने के लिए डेटासेट का उपयोग कर रहा हूं। मौजूदा ऑर्डर_आईडी संख्याओं को बनाए रखने की आवश्यकता है।डेटासेट डालने के लिए IDENTITY_INSERT को बंद करें
मैं का उपयोग कर की कोशिश की है:
SET IDENTITY_INSERT orders ON;
यह काम करता है जब मैं SqlServer प्रबंधन स्टूडियो में हूँ, मैं सफलतापूर्वक करने में सक्षम हूँ
INSERT INTO orders (order_Id, ...) VALUES (1, ...);
हालांकि, यह मुझे यह करने के लिए अनुमति नहीं है डेटासेट डालने के माध्यम से जो मैं अपनी रूपांतरण स्क्रिप्ट में उपयोग कर रहा हूं। जो मूल रूप से इस तरह दिखता है:
dsOrders.Insert(oldorderId, ...);
मैंने प्रक्रिया के दौरान SQL (SET IDENTITY_INSERT ऑर्डर ऑन) चलाया है। मुझे पता है कि मैं केवल एक समय में एक टेबल के खिलाफ ऐसा कर सकता हूं और मैं हूं।
अपवाद जब आदेश तालिका में एक मान सम्मिलित System.Data.SqlClient.SqlException करने का प्रयास: जब तालिका में पहचान स्तंभ के लिए स्पष्ट मूल्य सम्मिलित नहीं कर सकते 'आदेश' identity_insert
मैं इस अपवाद प्राप्त हो रही है बंद करने के लिए सेट है।
कोई विचार?
अद्यतन
Alexs & AlexKuznetsov उल्लेख किया है कि सेट identity_insert एक कनेक्शन स्तर सेटिंग है तथापि, है जब मैं SqlProfiler में एसक्यूएल को देखो, मैं कई आदेशों पर ध्यान दें।
- पहले -
SET IDENTITY_INSERT DEAL ON
- दूसरा -
exec sp_reset_connection
- तीसरा n करने के लिए - का चयन & डालने के
वहाँ हमेशा आदेशों के बीच एक exec sp_reset_connection
हालांकि है, मुझे विश्वास है कि यह सहित मेरी विभिन्न एसक्यूएल आज्ञाओं Identity_Insert सेटिंग पर मूल्य के नुकसान के लिए ज़िम्मेदार है।
क्या मेरे डेटासेट को कनेक्शन रीसेट करने से रोकने का कोई तरीका है?
लॉल, मेरे पास एक ही मूर्खतापूर्ण गलती थी – Jupaol