दिलचस्प पोस्ट
MongoDB के साथ एक नेस्टेड ऐरे अपडेट करना यह सुनिश्चित करने के लिए त्वरित और गंदी तरीका है कि एक खोल स्क्रिप्ट का केवल एक उदाहरण एक समय में चल रहा है पायथन में स्ट्रिंग के बजाय datetime के रूप में sqlite से datetime को वापस कैसे पढ़ा जाए? फोनगैप पर SQLite डेटाबेस एंड्रॉइड में टैब के भीतर गतिविधियों को लॉन्च करना जावास्क्रिप्ट – दशमलव संख्याओं को गोलाकार से फिक्स करने से रोकने के लिए मैं इन छवि प्रसंस्करण कार्यों को ओपनजीएल ईएस 2.0 शेडर का उपयोग कैसे कर सकता हूं? Google GWT में पाठ फ़ाइल पढ़ें? सी बहुआयामी सरणी में सूचक पता रनटाइम पर कक्षा परिभाषा की एनोटेशन स्ट्रिंग पैरामीटर को संशोधित करें इकाई फ़्रेमवर्क कोड प्रथम: मैं एक टेबल टूल्स के बीच वन-टू-एक और एक-टू-वन रिश्ते कैसे बना सकता हूं? टंकिनर विजेट में एक सबप्रोसेस का रीयलटाइम आउटपुट दिखाएं गिट धक्का का उपयोग करके एक प्रोजेक्ट को परिनियोजित करें पीडीओ के साथ एकल पंक्ति, सिंगल कॉलम प्राप्त करना PHP file_get_contents () रिटर्न "स्ट्रीम खोलने में विफल: HTTP अनुरोध विफल!"

अस्थायी रूप से बाधाओं को बंद करें (एमएस एसक्यूएल)

मैं सभी डीबी की बाधाओं को अस्थायी रूप से बंद करने का तरीका तलाश रहा हूं (जैसे टेबल रिलेशनशिप)

मुझे एक डीबी की टेबल को दूसरे डीबी में कॉपी करने की आवश्यकता है (INSERTs का उपयोग करके) मुझे पता है कि मैं आदेश को उचित क्रम में (रिश्तों को तोड़ने के लिए) निष्पादित करके प्राप्त कर सकता हूं।

लेकिन यह आसान होगा अगर मैं अस्थायी रूप से बाधाओं की जांच बंद कर सकता हूं और ऑपरेशन के खत्म होने के बाद इसे वापस कर सकता हूं।

क्या यह संभव है?

Solutions Collecting From Web of "अस्थायी रूप से बाधाओं को बंद करें (एमएस एसक्यूएल)"

आप केवल एसक्यूएल 2005+ में एफके और चेक की कमी को अक्षम कर सकते हैं वैकल्पिक तालिका देखें

 ALTER TABLE foo NOCHECK CONSTRAINT ALL 

या

 ALTER TABLE foo NOCHECK CONSTRAINT CK_foo_column 

प्राथमिक कुंजी और अनन्य बाधाएं अक्षम नहीं की जा सकती हैं, लेकिन अगर आपको सही ढंग से समझा है तो यह ठीक होना चाहिए I

 -- Disable the constraints on a table called tableName: ALTER TABLE tableName NOCHECK CONSTRAINT ALL -- Re-enable the constraints on a table called tableName: ALTER TABLE tableName WITH CHECK CHECK CONSTRAINT ALL --------------------------------------------------------- -- Disable constraints for all tables: EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -- Re-enable constraints for all tables: EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all' --------------------------------------------------------- 

और, यदि आप यह सत्यापित करना चाहते हैं कि आपने अपने रिश्ते को तोड़ दिया है और अनाथों को पेश किया है, तो एक बार आपने अपने चेक पुनः सशस्त्र किए हैं यानी

 ALTER TABLE foo CHECK CONSTRAINT ALL 

या

 ALTER TABLE foo CHECK CONSTRAINT FK_something 

तो आप वापस चला सकते हैं और किसी भी चेक किए गए कॉलम के खिलाफ अद्यतन कर सकते हैं:

 UPDATE myUpdatedTable SET someCol = someCol, fkCol = fkCol, etc = etc 

और उस बिंदु पर किसी भी त्रुटि बाधाओं को पूरा करने में विफलता के कारण होगा।

आप वास्तव में एक एकल SQL कमांड में सभी डेटाबेस बाधाओं को अक्षम कर सकते हैं और उन्हें एक और कमान कॉल कर पुनः सक्षम कर सकते हैं। देख:

  • विदेशी कुंजी बाधाओं को अस्थायी रूप से टीएसक्यूएल के प्रयोग से अक्षम कर सकते हैं?

मैं वर्तमान में SQL Server 2005 के साथ काम कर रहा हूँ, लेकिन मुझे पूरा यकीन है कि यह दृष्टिकोण SQL 2000 के साथ भी काम करता है

अक्षम करना और सभी विदेशी कुंजी को सक्षम करना

 CREATE PROCEDURE pr_Disable_Triggers_v2 @disable BIT = 1 AS DECLARE @sql VARCHAR(500) , @tableName VARCHAR(128) , @tableSchema VARCHAR(128) -- List of all tables DECLARE triggerCursor CURSOR FOR SELECT t.TABLE_NAME AS TableName , t.TABLE_SCHEMA AS TableSchema FROM INFORMATION_SCHEMA.TABLES t ORDER BY t.TABLE_NAME, t.TABLE_SCHEMA OPEN triggerCursor FETCH NEXT FROM triggerCursor INTO @tableName, @tableSchema WHILE ( @@FETCH_STATUS = 0 ) BEGIN SET @sql = 'ALTER TABLE ' + @tableSchema + '.[' + @tableName + '] ' IF @disable = 1 SET @sql = @sql + ' DISABLE TRIGGER ALL' ELSE SET @sql = @sql + ' ENABLE TRIGGER ALL' PRINT 'Executing Statement - ' + @sql EXECUTE ( @sql ) FETCH NEXT FROM triggerCursor INTO @tableName, @tableSchema END CLOSE triggerCursor DEALLOCATE triggerCursor 

सबसे पहले, विदेशी केकर्सर कर्सर को चयन कथन के रूप में घोषित किया जाता है जो विदेशी कुंजी और उनकी तालिका नामों की सूची एकत्र करता है। इसके बाद, कर्सर खोला जाता है और आरंभिक FETCH कथन निष्पादित होता है। यह FETCH बयान पहले पंक्ति के डेटा को स्थानीय चर में @foreignKeyName और @tableName में पढ़ा जाएगा। जब एक कर्सर के माध्यम से पाशन हो, तो आप 0 के मान के लिए @@ FETCH_STATUS देख सकते हैं, जो इंगित करता है कि फ़ेच सफल था। इसका अर्थ है कि लूप आगे बढ़ना जारी रखता है, ताकि यह पंक्तियों से प्रत्येक विदेशी कुंजी को प्राप्त कर सके। @@ FETCH_STATUS कनेक्शन पर सभी कर्सर के लिए उपलब्ध है। इसलिए यदि आप कई कर्सर के माध्यम से पाशन कर रहे हैं, तो FETCH कथन के तुरंत बाद बयान में @@ FETCH_STATUS के मूल्य की जांच करना महत्वपूर्ण है। @@ FETCH_STATUS कनेक्शन पर नवीनतम FETCH ऑपरेशन के लिए स्थिति को प्रतिबिंबित करेगा। @@ FETCH_STATUS के लिए मान्य मान हैं:

0 = FETCH सफल था
-1 = FETCH असफल रहा था
-2 = प्राप्त की गई पंक्ति गायब है

लूप के अंदर, कोड अल्टर टेबल कमांड को अलग तरीके से बनाता है, इस पर निर्भर करता है कि इरादा विदेशी कुंजी बाधा को निष्क्रिय करने या सक्षम करने के लिए है (चेक या नोचैक कीवर्ड का प्रयोग करके)। वक्तव्य तब संदेश के रूप में छपा हुआ है, इसकी प्रगति को देखा जा सकता है और फिर वक्तव्य निष्पादित किया जाता है। अंत में, जब सभी पंक्तियों के माध्यम से दोहराया जाता है, तो संग्रहीत कार्यविधि कर्सर को बंद कर देती है और उसे हटा देती है

MSDN पत्रिका से प्रतिबंध और ट्रिगर अक्षम करना देखें