Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

तालिका में कॉलम जोड़ें और फिर इसे लेनदेन के अंदर अपडेट करें

GO एक T-SQL कमांड नहीं है। एक बैच सीमांकक है। क्लाइंट टूल (SSM, sqlcmd, osql आदि) इसका उपयोग प्रभावी ढंग से कट करने के लिए करता है प्रत्येक GO पर फ़ाइल और सर्वर को अलग-अलग बैच भेजें। तो स्पष्ट रूप से आप IF के अंदर GO का उपयोग नहीं कर सकते हैं, और न ही आप यह उम्मीद कर सकते हैं कि वेरिएबल बैचों के दायरे में फैले हों।

साथ ही, आप XACT_STATE()<की जांच किए बिना अपवादों को नहीं पकड़ सकते। /कोड> यह सुनिश्चित करने के लिए कि लेन-देन बर्बाद नहीं हुआ है।

आईडी के लिए GUID का उपयोग करना हमेशा कम से कम संदेहास्पद होता है।

NOT NULL बाधाओं का उपयोग करना और एक डिफ़ॉल्ट 'गाइड' प्रदान करना जैसे '{00000000-0000-0000-0000-000000000000}' भी सही नहीं हो सकता।

अपडेट किया गया:

  • ALTER और UPDATE को दो बैचों में अलग करें।
  • त्रुटि पर स्क्रिप्ट को तोड़ने के लिए sqlcmd एक्सटेंशन का उपयोग करें। यह SSMS द्वारा समर्थित है जब sqlcmd मोड चालू होता है , sqlcmd, और क्लाइंट लाइब्रेरी में भी इसका समर्थन करने के लिए तुच्छ है:dbutilsqlcmd
  • उपयोग XACT_ABORT बैच को बाधित करने के लिए त्रुटि को बाध्य करने के लिए। यह अक्सर रखरखाव स्क्रिप्ट (स्कीमा परिवर्तन) में उपयोग किया जाता है। संग्रहीत कार्यविधियाँ और अनुप्रयोग तर्क स्क्रिप्ट सामान्य रूप से इसके बजाय TRY-CATCH ब्लॉक का उपयोग करते हैं, लेकिन उचित देखभाल के साथ:अपवाद प्रबंधन और नेस्टेड लेनदेन

उदाहरण स्क्रिप्ट:

:on error exit

set xact_abort on;
go

begin transaction;
go

if columnproperty(object_id('Code'), 'ColorId', 'AllowsNull') is null
begin
    alter table Code add ColorId uniqueidentifier null;
end
go

update Code 
  set ColorId = '...'
  where ...
go

commit;
go

केवल एक सफल स्क्रिप्ट ही COMMIT तक पहुंच पाएगी . कोई भी त्रुटि स्क्रिप्ट और रोलबैक को निरस्त कर देगी।

मैंने COLUMNPROPERTY का इस्तेमाल किया कॉलम अस्तित्व की जांच करने के लिए, आप इसके बजाय अपनी पसंद की किसी भी विधि का उपयोग कर सकते हैं (उदाहरण के लिए लुकअप sys.columns )।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2014 CTP1 के लिए एक नया VM तैयार करें

  2. SQL सर्वर में ALL का उपयोग करने के 3 तरीके

  3. FOR JSON PATH का उपयोग करके नेस्टेड JSON सरणियाँ बनाएँ

  4. मैं Windows प्रमाणीकरण का उपयोग करके sqlalchemy के माध्यम से SQL सर्वर से कैसे कनेक्ट करूं?

  5. एक्सएमएल ऑटो के लिए चयन करें और डेटाटाइप लौटाएं