ट्रांजैक्ट-एसक्यूएल फंडामेंटल। टी-एसक्यूएल प्रोग्रामिंग की बुनियादी बातों

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

एसक्यूएल इस तरह से सूचनात्मक-तार्किक मेरी तरह दिखता है, लेकिन मेरी प्रोग्रामिंग नहीं, लेकिन साथ ही एसक्यूएल अपने प्रक्रियात्मक विस्तार की संभावना बताता है, इस तरह की भाषा के सुधार के साथ, इसे प्रोग्रामिंग की भाषा के रूप में देखा जा सकता है।

इस घंटे में, निम्न SQL विनिर्देशों का विस्तार किया गया है:

डेटा बेस और एसक्यूएल विनिर्देश
डेटाबेस प्रकार एसक्यूएल विनिर्देश
माइक्रोसॉफ्ट एसक्यूएल लेन-देन एसक्यूएल
माइक्रोसॉफ्ट जेट/एक्सेस जेटएसक्यूएल
माई एसक्यूएल एसक्यूएल/पीएसएम (एसक्यूएल/लगातार संग्रहीत मॉड्यूल)
आकाशवाणी पीएल/एसक्यूएल (प्रक्रियात्मक भाषा/एसक्यूएल)
आईबीएम डीबी2 एसक्यूएल पीएल (एसक्यूएल प्रक्रियात्मक भाषा)
इंटरबेस / फायरबर्ड पीएसक्यूएल (प्रक्रियात्मक एसक्यूएल)

यह आलेख Transact-SQL विनिर्देशन को देखेगा, क्योंकि यह Microsoft SQL सर्वर द्वारा जीता गया है। usіh निर्दिष्ट SQL में Oskіlki आधार समान है, अधिक कमांड और परिदृश्य आसानी से अन्य प्रकार के SQL में स्थानांतरित किए जाते हैं।

नियुक्ति

Transact-SQL Microsoft का SQL प्रक्रियात्मक विस्तार है। एसक्यूएल पत्र एक्सटेंशन इस तरह साहसिक क्षमतायाक:

  • प्रमुख संचालक,
  • स्थानीय और वैश्विक परिवर्तन,
  • अलग अतिरिक्त प्रकार्यपंक्तियों, तिथियों, गणित आदि के प्रसंस्करण के लिए।
  • माइक्रोसॉफ्ट विंडोज प्रमाणीकरण समर्थन

Mova Transact-SQL विकी की कुंजी है एस क्यू एल सर्वर. सभी प्रोग्राम जो SQL सर्वर के एक उदाहरण के साथ इंटरैक्ट करते हैं, उनके कार्यान्वयन और कोर इंटरफ़ेस की परवाह किए बिना, सर्वर पर Transact-SQL निर्देश चलाते हैं।

डेटा बेस की पुष्टि की

सैद्धांतिक सामग्री में महारत हासिल करने के लिए, योग, जाहिर है, अभ्यास में लाने की जरूरत है। व्यावहारिक के लिए, हम एक ऐसा डाटा बेस बना सकते हैं जो मूल्य की एक छोटी राशि के लिए यादगार हो।

इसके अलावा, एक डेटाबेस बनाने और इसे, मानों के साथ संग्रहीत करने के लिए, कमांड को निष्पादित करने और SQL सर्वर को डाउनलोड करने और हमले की स्क्रिप्ट को लॉग करने के लिए कंसोल को खोलना आवश्यक है:

डाटाबेस क्रिएशन यूज मास्टर क्रिएट डाटाबेस टेस्टडाटाबेस गो -- टेबल क्रिएशन यूज टेस्टडाटाबेस क्रिएट टेबल यूजर्स (यूजरआईडी इंट प्राइमरी की, यूजरनेम एनवरचर(40), यूजरसर्नेम एनवरचर(40), डिपार्टमेंटआईडी इंट, पोजिशनआईडी इंट) क्रिएट, डिपार्टमेंटनाम एनवरचर(40)) क्रिएट टेबल पोजीशन (पोजिशनआईडी इंट प्राइमरी की, पोजिशननेम एनवरचर (40), बेससैलरी मनी) क्रिएट टेबल (कस्टमरआईडी इंट प्राइमरी की, कस्टमरनाम एनवरचर (40), कस्टमरएड्रेस एन प्राइमरी की, कस्टमरआईडी इंट, यूजरआईडी इंट, टेक्स्ट) गो - टेबल यूज भरें TestDatabase INSERT उपयोगकर्ता मूल्य (1, "इवान", "पेट्रोव", 1, 1) उपयोगकर्ता मूल्य सम्मिलित करें (2, "इवान", "सिदोरोव", 1, 2) उपयोगकर्ता मूल्य सम्मिलित करें (3, "पीटर", "इवानोव " , 1, 2) उपयोगकर्ता मूल्य डालें (4, "निकोले", "पेट्रोव", 1, 3) उपयोगकर्ता मूल्य डालें (5, "निकोले", "इवानोव", 2, 1) उपयोगकर्ता मूल्य डालें (6, "सर्गी " , "सिदोरोव", 2, 3) उपयोगकर्ता मूल्य डालें (7, "एंड्री", "बुकिन", 2, 2) उपयोगकर्ता मूल्य डालें (8, "विक्टर", "राइबाकोव", 4, 1) विभाग मूल्य डालें (1) , "उत्पादन") विभागों के मूल्यों को सम्मिलित करें (2, "वितरण") विभागों के मूल्यों को सम्मिलित करें (3, "क्रय")", 1000) पदों के मूल्यों को सम्मिलित करें (2, "वरिष्ठ विश्लेषक", 650) मूल्यों को सम्मिलित करें (1, "एलेक्स कंपनी ", "606443, रूस, बोर, लेनिना स्ट्र., 15") मान डालें (2, "पोट्रोव्का", "115516, मॉस्को, प्रोमिश्लनाया स्ट्र., 1") मान डालें (1, 1, 1, "विशेष भाग" ) जाना

टिप्पणी। Microsoft SQL Server 2000 के लिए, यह क्वेरी एनालाइज़र से जुड़ा हुआ है। Microsoft SQL Server 2005 के लिए, SQL सर्वर प्रबंधन स्टूडियो में जाँच करें।

SQL सर्वर पर स्क्रिप्ट के परिणामस्वरूप, TestDatabase डेटाबेस पाँच कोरिस्टुवाच तालिकाओं के साथ बनाया जाएगा: उपयोगकर्ता, विभाग, पद, स्थानीय ग्राहक, स्थानीय आदेश।

उपयोगकर्ताओं
उपयोगकर्ता पहचान उपयोगकर्ता नाम उपयोक्ताउपनाम विभाग आईडी स्थिति आईडी
1 इवान पेत्रोव 1 1
2 इवान सिदोरोव 1 2
3 पीटर इवानोव 1 3
4 निकोलस पेत्रोव 1 3
5 निकोलस इवानोव 2 1
6 सेर्गेई सिदोरोव 2 3
7 एंड्री बुकिन 2 3
8 विजेता रिबाकोव 4 1
स्थितियां
स्थिति आईडी पदनाम मूल वेतन
1 प्रबंधक 1000
2 वरिष्ठ विश्लेषक 650
3 विश्लेषक 400
स्थानीय आदेश
आदेश कामतत्व ग्राहक आईडी उपयोगकर्ता पहचान विवरण
1 1 1 विशेष अंग
विभागों
विभाग आईडी विभाग का नाम
1 उत्पादन
2 वितरण
3 क्रय
स्थानीय ग्राहक
ग्राहक आईडी ग्राहक का नाम ग्राहक का पता
1 एलेक्स कंपनी 606443, रूस, बोर, लेनिना स्ट्र।, 15
2 पोत्रोव्का 115516, मॉस्को, प्रोमिश्लनाया स्ट्र।, 1

सिंटेक्स तत्व

स्क्रिप्ट निर्देश

स्क्रिप्ट निर्देश - ये विशिष्ट कमांड हैं, जो MS SQL में अधिक सामान्य हैं। क्यूई कमांड सर्वर को स्क्रिप्ट और लेनदेन के साथ काम करने के नियमों को निर्धारित करने में मदद करते हैं। विशिष्ट प्रतिनिधि: GO - स्क्रिप्ट के अंत के बारे में SQL सर्वर को संकेत देता है, EXEC (या EXECUTE) - एक प्रक्रिया या स्केलर फ़ंक्शन को चिन्हित करता है।

टिप्पणियाँ

स्क्रिप्ट ब्लॉक के लिए स्पष्टीकरण के निर्माण के साथ-साथ स्क्रिप्ट समायोजित होने पर आदेशों की समय-सीमा के लिए टिप्पणियां तैयार की जाती हैं। टिप्पणियाँ पंक्ति-जैसी और ब्लॉक-जैसी दोनों हैं:

  • --- एक पंक्ति टिप्पणी में एक से अधिक पंक्तियाँ शामिल होती हैं, जिसके सामने दो मीनू होती हैं।
  • /* */ - ब्लॉक कमेंट्री में कमांड के पूरे ब्लॉक, निर्दिष्ट निर्माण के लिए निर्देश शामिल नहीं हैं।

टिपी दानिह

भाषा प्रोग्रामिंग की तरह, SQL सीखें अलग - अलग प्रकारपरिवर्तन को बचाने के लिए डेटा:

  • नंबर - संख्यात्मक मानों को बचाने के लिए (इंट, टिनिंट, स्मॉलिंट, बिगिंट, न्यूमेरिक, डेसीमल, मनी, स्मॉलमनी, फ्लोट, रियल)।
  • तारीख - उस घंटे की तारीख (दिनांक समय, छोटी तारीख समय) को बचाने के लिए।
  • चरित्र डेटा को बचाने के लिए वर्ण (char, nchar, varchar, nvarchar)।
  • Dviykovі - बाइनरी डेटा (बाइनरी, वर्बिनरी, बिट) को बचाने के लिए।
  • अधिक मात्रा - महान बाइनरी डेटा (टेक्स्ट, एनटेक्स्ट, इमेज) को बचाने के लिए डेटा के प्रकार।
  • विशेष - संकेतक (कर्सर), 16-बाइट हेक्साडेसिमल संख्या, GUID (अद्वितीय पहचानकर्ता), पंक्ति परिवर्तन स्टाम्प (टाइमस्टैम्प), पंक्ति संस्करण (पंक्ति संस्करण), टेबल (तालिका) के लिए एक जीत के रूप में।

टिप्पणी। रूसी प्रतीकों के चयन के लिए (नहीं एएससीआईआई एन्कोडिंग) प्रकार के डेटा को उपसर्ग "n" (nchar, nvarchar, ntext) के साथ लिखा जाता है, जैसे कि वे दो बाइट्स में वर्णों को एनकोड करते हैं। अन्यथा, यूनिकोड कार्य के लिए, "n" से डेटा प्रकार का उपयोग किया जाता है।

टिप्पणी। जीवन के परिवर्तन के डेटा के लिए, उपसर्ग "var" से डेटा प्रकार टाइप किए जाते हैं। उपसर्ग "var" के बिना डेटा के प्रकार मेमोरी क्षेत्र में तय किए जा सकते हैं, उनमें से कुछ रिक्त स्थान या शून्य से भरे जा सकते हैं।

पहचानकर्ता

पहचानकर्ता - सी.ई विशेष वर्ण, yakі vykoristovuyutsya zі zmіnnimi for іdentifіkatsіїїїї їkh type аbo grupuvannya slіv u zminnu। पहचानकर्ताओं के प्रकार:

  • @ - स्थानीय परिवर्तन की पहचानकर्ता (कोरिस्टुवाच)।
  • @@ - वैश्विक परिवर्तन की पहचानकर्ता (प्रस्तुत)।
  • # - प्रक्रिया की स्थानीय तालिका का पहचानकर्ता।
  • ## - प्रक्रिया की वैश्विक तालिका की पहचानकर्ता।
  • - परिवर्तन में शब्दों के समूहीकरण की पहचानकर्ता।

परिवर्तन

टिमचास की श्रद्धांजलि को बचाने के लिए स्क्रिप्ट में बदलाव किए जाते हैं। Sob pratsyuvati zі zminnoyu, to यह निंदा करना आवश्यक है, इससे पहले कि लेन-देन में आवाज़ zdіysnen हो सकती है, उसी तरह टीम विजयी होती है, जैसे विजयी tsyu zminna। नहीं तो ऐसा लगता है कि Transaction पूरा होने के बाद फिर GO के बाद बदल जाता है।

बदली गई सेटिंग्स को DECLARE कमांड से बदला जा सकता है, बदली हुई सेटिंग्स को SET कमांड या सेलेक्ट कमांड के साथ सेट किया जा सकता है:

टेस्टडेटाबेस का उपयोग करें - अनाम परिवर्तन। SELECT @EmpName AS GO क्वेरी के परिणामस्वरूप परिवर्तित @EmpName दिखाई दे रहा है

टिप्पणी। प्रत्येक बट के लिए, परिवर्तन पर शब्दों का एक समूह होता है - डिज़ाइन को एक परिवर्तन के रूप में स्वीकार किया जाता है, क्योंकि शब्दों को वर्ग धनुष पर रखा जाता है।

ऑपरेटर्स

ऑपरेटर्स - त्से विशेष आदेश, परिवर्तनों पर सरल ऑपरेशन करने के लिए उपयोग किया जाता है:

  • अंकगणितीय संचालक: "*" - गुणा करें, "/" - विभाजित करें, "%" - मापांक उपविभाजित करें, "+" - जोड़ें, "-" - जोड़ें, "()" - चाप।
  • मिलान करने वाले ऑपरेटर: "=" - एक, ">" - और, "<" - меньше, ">=" - एक से अधिक, "<=" меньше или равно, "<>"- अच्छा नहीं है।
  • आदेश देने वाले ऑपरेटर: "+" - पंक्तियों को बंद करना।
  • तार्किक संकारक: "AND" - एक, "OR" - या तो, "NOT" - नहीं।

सिस्टम कार्य करता है

ट्रांजैक्ट-एसक्यूएल विनिर्देश निम्नलिखित कार्यों को शामिल करने के लिए मानक एसक्यूएल क्षमताओं को महत्वपूर्ण रूप से बढ़ाता है:

  • कुल कार्य-संग्रह के साथ काम करने वाले कार्यों का एक ही मूल्य है। विशिष्ट प्रतिनिधि: AVG - स्तंभ का औसत मान, SUM - स्तंभ का योग, MAX - स्तंभ का अधिकतम मान, COUNT - स्तंभ में तत्वों की संख्या।
  • स्केलर फ़ंक्शन ऐसे फ़ंक्शन होते हैं जो एक मान को घुमाते हैं, स्केलर डेटा के साथ काम करते हैं, या इनपुट डेटा के बिना प्रवेश करने के बजाय। विशिष्ट प्रतिनिधि: DATEDIFF - तिथियों के बीच अंतर, ABS - संख्या का मापांक, DB_NAME - डेटा बेस नाम, USER_NAME - प्रवाह रेखा रिकॉर्डर नाम, LEFT - डेटा पंक्ति का भाग।
  • कार्य-विनिर्देशक-कार्य, जैसे vikoristovuyutsya जैसे कि अन्य डेटा पर मजबूर। विशिष्ट प्रतिनिधि: OPENXML - XML ​​संरचनाओं को देखने के लिए डेटा ट्री के लिए संकेतक, OPENQUERY - किसी अन्य अनुरोध को देखने के लिए डेटा ट्री के लिए संकेतक।

टिप्पणी। कार्यों की पूरी सूची SQL सर्वर कनेक्शन में पाई जा सकती है।

टिप्पणी। स्केलर फ़ंक्शंस से पहले, आप वैश्विक परिवर्तन जोड़ सकते हैं, जिन्हें स्क्रिप्ट के पाठ में अंडरडॉग "@@" कहा जाता है।

TestDatabase का उपयोग करें - बच्चे के औसत वेतन के लिए विकटर एकत्रीकरण फ़ंक्शन चुनें AVG (आधार वेतन) जैसा कि पदों से जाना जाता है - डेटा बेस नाम (30) SET @MyUser = USER_NAME() "वर्तमान उपयोगकर्ता" का डेटाबेस उपयोगकर्ता नाम प्राप्त करने के लिए विकटर स्केलर फ़ंक्शन है: "+ @MyUser GO - किसी अन्य सर्वर से डेटा पुनर्प्राप्त करने के लिए भिन्न कॉलर फ़ंक्शन चुनें * OPENQUERY से (OracleSvr, "चयन करें नाम, स्वामी.शीर्षक से आईडी") जाएं

विराज़ी

विराज़ प्रतीकों और ऑपरेटरों का एक संयोजन है, क्योंकि यह इनपुट पर एक स्केलर मान लेता है, और आउटपुट पर यह एक अलग मान देता है, या फिर यह एक स्केलर मान लेता है। Transact-SQL के 3 प्रकार हैं: DDL, DCL और DML।

  • डीडीएल (डेटा डेफिनिशन लैंग्वेज) - डेटाबेस में वस्तुओं के निर्माण के लिए हैक। इस वर्ग के मुख्य प्रतिनिधि हैं: बनाएँ - वस्तुओं का निर्माण, ALTER - वस्तुओं का परिवर्तन, DROP - वस्तुओं को हटाना।
  • DCL (डेटा कंट्रोल लैंग्वेज) - डेटाबेस ऑब्जेक्ट्स के अधिकारों की मान्यता की मान्यता। इस वर्ग के मुख्य प्रतिनिधि: GRANT - ऑब्जेक्ट को अनुमति दी गई, DENY - ऑब्जेक्ट को फेंस किया गया, REVOKE - ने उस बाड़ को ऑब्जेक्ट की अनुमति दी।
  • डीएमएल - डेटा हेरफेर भाषा इस वर्ग के मुख्य प्रतिनिधि हैं: चयन - डेटा का चयन, INSERT - डेटा का सम्मिलन, अद्यतन - डेटा का परिवर्तन, DELETE - डेटा का दृश्य।

TestDatabase का उपयोग करें -- DDL टैग क्रिएट टेबल TempUsers (UserID int, UserName nvarchar(40), DepartmentID int) GO -- DCL टैग ग्रांट सेलेक्ट ऑन यूज़र्स टू पब्लिक GO -- DML टैग सेलेक्ट UserID, UserName + "" + UserSurname AS F GO -- डीडीएल ड्रॉप टेबल टेम्पयूजर्स गो विकी

स्क्रिप्ट नियंत्रण

ट्रांजैक्ट-एसक्यूएल में विशेष आदेश हैं जो आपको स्ट्रीम में स्क्रिप्ट के माध्यम से हैक करने की अनुमति देते हैं, इसके माध्यम से सीधे आपको आवश्यक तर्क के साथ लूपिंग करते हैं।

  • ग्रुपिंग ब्लॉक एक ऐसी संरचना है जो वायरस को एक तार्किक ब्लॉक (BEGIN ... END) में जोड़ती है।
  • माइंड ब्लॉक - एक संरचना, सिंगिंग माइंड (IF ... ELSE) की दृष्टि को विकृत करने के तरीके के रूप में।
  • लूप ब्लॉक - एक संरचना जो तार्किक ब्लॉक की पुनरावृत्ति को व्यवस्थित करती है (WHILE ... BREAK ... CONTINUE)।
  • संक्रमण - स्क्रिप्ट प्रवाह को निर्दिष्ट लेबल (GOTO) पर स्विच करने का आदेश।
  • Zatrimka - एक टीम जो zatrimka vikonannya परिदृश्य (WAITFOR)
  • क्षमा साप्ताहिक - एक आदेश जो एक स्क्रिप्ट के लिए क्षमा उत्पन्न करता है (RAISERROR)

वायरस का गतिशील डिजाइन

फिर, ट्रांजैक्ट-एसक्यूएल की मूल बातें समझने और सरल अनुप्रयोगों पर अभ्यास करने के बाद, आप तह संरचनाओं पर आगे बढ़ सकते हैं। डेटा बेस को कॉल करें और उन्हें अतिरिक्त परिदृश्यों (स्क्रिप्ट) के लिए बैक अप बनाएं - यदि विज़ुअल एडिटर जानवरों के लिए सरल है, लेकिन यदि आप नेडोलिकिव के बिना एक बड़ा डेटा बेस नहीं बनाते हैं, तो आप इसे सहेज नहीं पाएंगे। जैसे ही आप आँकड़ों के कोब का अनुमान लगाते हैं, तो अंतिम डेटा बेस बनाया गया और एक अतिरिक्त परिदृश्य के लिए भर दिया गया। परिदृश्य - प्रशासक के काम को स्वचालित करने के लिए केवल एक या अधिक वायरस, एक तार्किक ब्लॉक में संयुक्त।

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

मास्टर का उपयोग करें - डायनामिक डेटा सेट करें DECLARE @dbname varchar(30), @tablename varchar(30), @column varchar(30) SET @dbname = "TestDatabase" SET @tablename = "Positions" SET @column = "BaseSalary" - - डायनेमिक डेटा निष्पादन का संस्करण ("उपयोग करें" + @dbname + "चुनें AVG(" + @column + ") AS FROM " + @tablename) देखें

डेटा का संग्रहण

SQL चालों में, तालिका से डेटा का चयन SELECT कमांड की सहायता के बाद निर्दिष्ट किया जाता है:

चुनना<названия колонок или *>से<название таблицы>

लॉक के पीछे, SELECT कमांड में ALL पैरामीटर होता है, जिसे छोड़ा जा सकता है। यदि आप कमांड में DISTINCT पैरामीटर निर्दिष्ट करते हैं, तो परिणाम चयन से केवल अद्वितीय (गैर-दोहराने योग्य) रिकॉर्ड का उपभोग करेगा।

कमांड में ऑब्जेक्ट के नाम को SQL सर्वर में बदलने के लिए, AS कमांड को बदला जाता है। Vicoristannya tsієї आदेश पंक्ति के लंबे समय को गति देने में मदद करते हैं, और इसलिए परिणाम को आसान आंखों से लें।

स्थानीय ग्राहक तालिका से सभी रिकॉर्ड का चयन करें * से चुनें - उपयोगकर्ता तालिका से उपयोगकर्ता नाम कॉलम के अद्वितीय रिकॉर्ड का चयन करें उपयोगकर्ताओं से अलग उपयोगकर्ता नाम चुनें

उपयोगकर्ता नाम
एंड्री
इवान
निकोलस
पीटर
सेर्गेई
विजेता

डेटा की फ़िल्टरिंग WHERE कमांड की मदद से की जाती है, इस स्थिति में अगला ऑपरेटर और वह कमांड बराबर होते हैं: =,<, >, <=, >=, <>, जैसे, पसंद नहीं है, और, या, नहीं, बीच में, बीच में नहीं, में, में नहीं, शून्य, शून्य नहीं है। वाइल्ड लुक में, फ़िल्टर से सेलेक्ट कमांड इस तरह दिखता है:

चुनना<названия колонок или *>से<название таблицы>कहाँ<условие>

संरेखण की एक पंक्ति में, प्रतीकों और प्रतिस्थापनों को बदलने की अनुमति है:

  • % - यह कई प्रतीक हों;
  • _ - एक वर्ण;
  • - क्या कोई प्रतीक है, मंदिरों में संकेत हैं;
  • [^] - प्रतीक बनो, बाहों में नहीं।
- उपयोगकर्ता तालिका से सभी रिकॉर्ड का चयन करें जहां विभाग आईडी = 1 चयन करें * उपयोगकर्ताओं से जहां विभाग आईडी = 1
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडी
1 इवान पेत्रोव 1 1
2 इवान सिदोरोव 1 2
3 पीटर इवानोव 1 2
4 निकोलस पेत्रोव 1 3
-- उपयोक्ता तालिका से उन सभी अभिलेखों का चयन करें जिनके नाम में A अक्षर है।
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडी
1 इवान पेत्रोव 1 1
2 इवान सिदोरोव 1 2
4 निकोलस पेत्रोव 1 3
5 निकोलस इवानोव 2 1
7 एंड्री बुकिन 2 2
-- उपयोक्ता तालिका से उन सभी अभिलेखों का चयन करें जिनके मित्र के नाम में एक गैर-V अक्षर है।

फ़िल्टरिंग आपको पेय का चयन करने की अनुमति देता है, ताकि आप कई पेय पदार्थों से पेय तैयार कर सकें:

स्थिति तालिका, आधार वेतन से स्थिति आईडी कॉलम के रिकॉर्ड का चयन करें< 600 SELECT PositionID FROM Positions WHERE BaseSalary < 600 -- Выбрать все записи из таблицы Users, у кого имя Ivan или Andrey SELECT * FROM Users WHERE UserName IN ("Ivan", "Andrey")

चयन में डेटा को सॉर्ट करने के लिए, ORDER BY कमांड का उपयोग किया जाता है, और फिर जांचें कि यह कमांड टाइप टेक्स्ट, एनटेक्स्ट और इमेज के डेटा को सॉर्ट नहीं करता है। डिफ़ॉल्ट रूप से, आकार के अनुसार छँटाई की जाती है, इसलिए इस प्रकार के लिए ASC पैरामीटर को छोड़ा जा सकता है:

चुनना<названия колонок или *>से<название таблицы>कहाँ<условие>द्वारा आदेश<названия колонок>

परिणाम में पंक्तियों की संख्या बढ़ाने के लिए, शीर्ष आदेश जीतता है:

शीर्ष चुनें [पंक्तियों की संख्या]<названия колонок или *>से<название таблицы>कहाँ<условие>द्वारा आदेश<названия колонок>

पूछताछ के बीच में, ली गई श्रद्धांजलि की गणना करना संभव है। जिसके लिए एकत्रीकरण कार्यों का उपयोग किया जाता है:

  • AVG(स्तंभ) - स्तंभ का औसत मान;
  • काउंट (कॉलम) - कॉलम में गैर-पूर्ण तत्वों की संख्या;
  • काउंट(*) - अनुरोध में मदों की संख्या;
  • अधिकतम (स्तंभ) - स्तंभ में अधिकतम मान;
  • न्यूनतम (स्तंभ) - स्तंभ में न्यूनतम मान;
  • SUM(स्तंभ) - स्तंभ के लिए मानों का योग।

विभिन्न प्रकार के ऑर्डर, टॉप कमांड और एग्रीगेशन फ़ंक्शंस लागू करें:

उपयोगकर्ता तालिका से उपयोगकर्ता नाम कॉलम के पहले 3 अद्वितीय रिकॉर्ड का चयन करें, उपयोगकर्ता नाम द्वारा छांटे गए शीर्ष 3 उपयोगकर्ता नाम संगठन में उपयोगकर्ताओं के वेतन से चुनें पद))

समूहीकरण डेटा

SQL आपको तालिका में समान फ़ील्ड के पीछे डेटा समूहित करने की अनुमति देता है। कुछ पैरामीटर द्वारा डेटा को समूहित करने के लिए, SQL क्वेरी के लिए GROUP BY कमांड लिखना आवश्यक है, जिसके लिए कॉलम का नाम, जिसके लिए समूहीकरण किया जाना है। GROUP BY कमांड में निर्दिष्ट कॉलम सेलेक्ट कमांड में मौजूद होने के कारण हैं, और एग्रीगेशन फ़ंक्शन को बदलने के लिए सेलेक्ट कमांड भी जिम्मेदार है, क्योंकि यह डेटा को ग्रुप करने से पहले अटक जाएगा।

त्वचा समूह में चिकित्सकों की संख्या का पता लगाएं (चिकित्सकों के समूह - प्रजातियों की आईडी और त्वचा समूह में रिकॉर्ड की संख्या को क्रमबद्ध करें) विभाग का चयन करें, COUNT (उपयोगकर्ता आईडी) "उपयोगकर्ताओं की संख्या" के रूप में

विभाग आईडीउपयोगकर्ता की संख्या
1 4
2 3
4 1

समूहों के अनुरोध पर पंक्तियों को फ़िल्टर करने के लिए, माइंड फ़िल्टर को निर्दिष्ट करने के लिए एक विशेष HAVING टीम लगाई जाएगी। जिन स्तंभों के पीछे फ़िल्टरिंग लागू की गई है, वे GROUP BY टीम में मौजूद होने के कारण हैं। HAVING कमांड का उपयोग GROUP BY के बिना भी किया जा सकता है, जिस स्थिति में यह WHERE कमांड के पहले की तरह काम नहीं करेगा, लेकिन यह आपको फ़िल्टरिंग के दिमाग में केवल एकत्रीकरण फ़ंक्शन को ब्लॉक करने की अनुमति भी देता है।

पहले व्यक्ति में चिकित्सकों की संख्या का पता लगाएं (चिकित्सकों के समूह - iddil_identifier द्वारा, त्वचा समूह में रिकॉर्ड की संख्या का विश्लेषण करें - समान पहचानकर्ता 1 के साथ n_dil से कम परिणाम दर्ज करें) SELECT DepartmentID , COUNT(UserID) AS "की संख्या उपयोगकर्ता "DepartmentID द्वारा DepartmentID = 1 - त्वचा पर गीत रोपण के साथ चिकित्सकों की संख्या का पता लगाएं vіddіlі - (चिकित्सकों को іdіdіkіka posad i vіddіlіv ta द्वारा समूहित करें - त्वचा समूह में प्रविष्टियों की संख्या को क्रमबद्ध करें), साथ ही सॉर्ट करें - त्वचीय vіddіlі पर nikіv की संख्या और चिकित्सकों की कुल संख्या विभाग आईडी, स्थिति आईडी, काउंट (उपयोगकर्ता आईडी) के रूप में "उपयोगकर्ताओं की संख्या" के रूप में विभाग आईडी द्वारा उपयोगकर्ताओं की संख्या, रोलअप के साथ स्थिति आईडी का चयन करें

विभाग आईडीस्थिति आईडीउपयोगकर्ता की संख्या
1 1 1
1 2 2
1 3 1
1 व्यर्थ 4
2 1 1
2 2 1
2 3 1
2 व्यर्थ 3
4 1 1
4 व्यर्थ 1
व्यर्थ व्यर्थ 8

ग्रुपिंग कमांड को विथ क्यूब ऑपरेटर के साथ भी पूरक किया जा सकता है, जो आगे समूहबद्ध कॉलम के सभी संयोजनों का निर्माण करेगा: यदि एन कॉलम हैं, तो 2^एन संयोजन होंगे।

त्वचा समूह में गीत रोपण के साथ चिकित्सकों की संख्या जानने के लिए - (निपटान के पहचानकर्ता द्वारा चिकित्सकों के समूह और vіddіlіv में - त्वचा समूह में रिकॉर्ड की संख्या को क्रमबद्ध करें), और यह भी क्रमबद्ध करें - चिकित्सकों की संख्या स्किन प्लांटिंग में, स्किन पैच के अनुसार, और प्रैक्टिशनर्स की कुल संख्या सेलेक्ट डिपार्टमेंटआईडी, पोजिशनआईडी, काउंट(यूजरआईडी) एएस "यूजर ऑफ नम्बर" फ्रॉम यूजर्स ग्रुप बाय डिपार्टमेंटआईडी, पोजिशनआईडी विथ क्यूब

विभाग आईडीस्थिति आईडीउपयोगकर्ता की संख्या
1 1 1
1 2 2
1 3 1
1 व्यर्थ 4
2 1 1
2 2 1
2 3 1
2 व्यर्थ 3
4 1 1
4 व्यर्थ 1
व्यर्थ व्यर्थ 8
व्यर्थ 1 3
व्यर्थ 2 3
व्यर्थ 3 2

ग्रुपिंग एग्रीगेशन फ़ंक्शन आपको यह निर्धारित करने की अनुमति देता है कि रोलअप और क्यूब कमांड द्वारा रिकॉर्ड जोड़ा गया है या डेटा बॉक्स से रिकॉर्ड हटा दिया गया है या नहीं।

त्वचा समूह में चिकित्सकों की संख्या का पता लगाएं (चिकित्सकों के समूह चर के पहचानकर्ता द्वारा और त्वचा समूह में रिकॉर्ड की संख्या का विश्लेषण करें) - साथ ही अतिरिक्त पंक्तियों की पहचान करें जो चयन विभाग आईडी डेटाबेस में नहीं पाए जाते हैं, COUNT( UserID) AS "उपयोगकर्ताओं की संख्या", ग्रुपिंग (DepartmentID) के रूप में "जोड़ी गई पंक्ति" के रूप में रोलअप के साथ विभाग द्वारा उपयोगकर्ता समूह से

विभाग आईडीउपयोगकर्ता की संख्याजोड़ी गई पंक्ति
1 4 0
2 3 0
4 1 0
व्यर्थ 8 1

एक अन्य ग्रुपिंग कमांड, कंप्यूट, आपको डेटा को समूहीकृत करने और विभिन्न तालिकाओं में प्रदर्शित करने की अनुमति देता है। यही है, ROLLUP और CUBE ऑपरेटरों के साथ GROUP BY कमांड समूह डेटा को एक स्टार के साथ अतिरिक्त पंक्तियों की तालिका में जोड़ता है, और समूह डेटा के लिए COMPUTE कमांड, तालिका को सबटेबल्स की एक पंक्ति में विस्तारित करता है, और सितारों के साथ एक सबटेबल भी बनाता है। . कंप्यूट कमांड को दो मोड में ओवरराइड किया जा सकता है:

  • तालिका के चारों ओर परिणाम प्रदर्शित करने के लिए एकत्रीकरण फ़ंक्शन कितना आसान है;
  • BY पैरामीटर के साथ ग्रुपिंग कमांड के रूप में जो टेबल को स्प्रैट सबटेबल में विस्तारित करता है

BY पैरामीटर के साथ COMPUTE कमांड को ORDER BY कमांड के साथ कम या ज्यादा जोड़ा जा सकता है, और सॉर्टिंग कॉलम ग्रुपिंग कॉलम के समान होते हैं।

कंपनी खातों की एक तालिका दर्ज करें और उनकी संख्या की जांच करें * उपयोगकर्ताओं से गणना करें (उपयोगकर्ता आईडी) चुनें

उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडी
1 इवान पेत्रोव 1 1
2 इवान सिदोरोव 1 2
3 पीटर इवानोव 1 2
4 निकोलस पेत्रोव 1 3
5 निकोलस इवानोव 2 1
6 सेर्गेई सिदोरोव 2 3
7 एंड्री बुकिन 2 2
8 विजेता रिबाकोव 4 1
सीएनटी
8
- एक त्वचा समूह में चिकित्सकों की संख्या का पता लगाएं (समूह चिकित्सकों द्वारा - प्रजातियों की आईडी और एक त्वचा समूह में रिकॉर्ड की संख्या को छाँटें) चयन करें * उपयोगकर्ताओं से
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडी
1 इवान पेत्रोव 1 1
2 इवान सिदोरोव 1 2
3 पीटर इवानोव 1 2
4 निकोलस पेत्रोव 1 3
सीएनटी
4
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडी
5 निकोलस इवानोव 2 1
6 सेर्गेई सिदोरोव 2 3
7 एंड्री बुकिन 2 2
सीएनटी
3
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडी
8 विजेता रिबाकोव 4 1
सीएनटी
1

Z'ednannya तालिका

SQL में सबसे महत्वपूर्ण और आवश्यक प्रश्न - तालिकाओं के लिए CE प्रश्न, यदि dzherel की संख्या की दर से चयन आवश्यक है। इसलिए, लिखने के लिए फोल्डिंग के लिए पूछें, लेकिन लिखने के लिए भी, शार्क अक्सर प्रोग्राम में पहले से तैयार परिणाम देखते हैं, जो अब स्क्रीन पर प्रदर्शित करने के लिए पर्याप्त नहीं है।

आप SQL में टेबल को दो तरह से लिंक कर सकते हैं: लंबवत और क्षैतिज रूप से।

UNION कमांड द्वारा लंबवत रूप से बनाया गया, उदाहरण के लिए, पहली तालिका, दूसरी तालिका जोड़ें। इस तरह के संयोजन के साथ, संयुक्त तालिका के स्तंभों की संख्या समान हो सकती है, और स्वयं स्तंभों में समान नाम और प्रकार के डेटा होते हैं। यदि आप समान पंक्तियों को जोड़ते हैं जो दोनों तालिकाओं में दिखाई देती हैं, तो आप देखेंगे कि कमांड में सभी पैरामीटर निर्दिष्ट नहीं हैं।

इवान नाम के सभी संवाददाताओं को जानें और परिणाम लौटाएं - क्वेरी का परिणाम "पेट्रोव नाम के सभी संवाददाताओं को ढूंढें" - डुप्लिकेट प्रविष्टियां सक्षम करें * उपयोगकर्ताओं से चुनें जहां उपयोगकर्ता नाम = "इवान"

उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडी
1 इवान पेत्रोव 1 1
2 इवान सिदोरोव 1 2
4 निकोलस पेत्रोव 1 3
- इवान नाम के सभी संवाददाताओं को खोजें और परिणाम लौटाएं - क्वेरी से परिणाम "पेट्रोव नाम के सभी संवाददाताओं का पता लगाएं" - डुप्लीकेट रिकॉर्ड सहेजें * उपयोगकर्ताओं से चुनें * जहां उपयोगकर्ता नाम = "इवान" संघ सभी का चयन करें * उपयोगकर्ताओं से जहां उपयोगकर्ता नाम = "पेट्रोव"
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडी
1 इवान पेत्रोव 1 1
2 इवान सिदोरोव 1 2
1 इवान पेत्रोव 1 1
4 निकोलस पेत्रोव 1 3

प्रमुख स्तंभों के पीछे क्षैतिज रूप से z'ednannya zdіysnyuєtsya shlyah zcheplennya kіlkoh टेबल। सबसे सरल क्षैतिज जुड़ाव के बाद INNER JOIN कमांड की मदद से, zchіplyuє टेबल की तरह, दोनों टेबल में zustrіchaєtsya की तरह प्रमुख फ़ील्ड की पंक्तियों को चुनना।

चुनना<названия колонок или *>से<таблица_1>इनर जॉइन टेबल_2 ऑन टेबल_1.की_फील्ड = टेबल_2.की_फील्ड

बाईं तालिका के सभी क्षेत्रों से स्वतंत्र रूप से जुड़ने के साथ-साथ दाईं तालिका में रिकॉर्ड का चयन करने के लिए, LEFT JOIN कमांड का चयन करना आवश्यक है। यह आदेश नीचे की तालिका लौटाता है, बाईं तालिका से सभी पंक्तियों का चयन करता है, और दाईं तालिका में डेटा, जो दैनिक हैं, NULL मान से भरे हुए हैं।

चुनना<названия колонок или *>से<таблица_1>लेफ्ट जॉइन टेबल_2 ऑन टेबल_1.की_फील्ड = टेबल_2.की_फील्ड

राइट जॉइन कमांड फ्रंट के समान है, केवल अंतर यह है कि यह नीचे की तालिका में है, दाईं तालिका से सभी पंक्तियों का चयन करता है, और बाईं तालिका का दैनिक डेटा NULL मानों से भरा होता है।

चुनना<названия колонок или *>से<таблица_1>राइट जॉइन टेबल_2 ऑन टेबल_1.की_फील्ड = टेबल_2.की_फील्ड

FULL JOIN कमांड को शामिल होने का अपना अधिकार है, इसलिए यह तालिकाओं में शामिल नहीं होगा, दोनों तालिकाओं से पंक्तियों का चयन करेगा, और दैनिक डेटा को NULL मान पर लौटाएगा।

चुनना<названия колонок или *>से<таблица_1>पूर्ण जॉइन टेबल_2 ऑन टेबल_1.की_फील्ड = टेबल_2.की_फील्ड

क्रॉस जॉइन कमांड द्वारा शेष तालिका को शायद ही कभी पीटा जाता है। यह आदेश कुंजी फ़ील्ड की पसंद के बिना टेबल उत्पन्न करता है, और नतीजा आउटपुट टेबल की विभिन्न पंक्तियों का एक ही संयोजन होता है।

चुनना<названия колонок или *>से<таблица_1>क्रॉस जॉइन टेबल_2

जुड़ना दो से अधिक तालिकाओं तक सीमित नहीं है, यह कुछ JOIN कमांड भी ले सकता है, जो अंतिम zvіtіv बनाने के लिए अधिक सुविधाजनक है। तालिका से सभी आदेशों के लिए नीचे एक उदाहरण है।

सेलेक्ट * फ्रॉम यूजर्स इनर जॉइन डिपार्टमेंट्स ऑन यूजर्स.डिपार्टमेंटआईडी = डिपार्टमेंट्स.डिपार्टमेंटआईडी

उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडीविभाग आईडीविभाग का नाम
1 इवान पेत्रोव 1 1 1 उत्पादन
2 इवान सिदोरोव 1 2 1 उत्पादन
3 पीटर इवानोव 1 2 1 उत्पादन
4 निकोलस पेत्रोव 1 3 1 उत्पादन
5 निकोलस इवानोव 2 1 2 वितरण
6 सेर्गेई सिदोरोव 2 3 2 वितरण
7 एंड्री बुकिन 2 2 2 वितरण
सेलेक्ट * फ्रॉम यूजर्स। लेफ्ट जॉइन डिपार्टमेंट्स ऑन यूजर्स। डिपार्टमेंटआईडी = डिपार्टमेंट्स। डिपार्टमेंटआईडी
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडीविभाग आईडीविभाग का नाम
1 इवान पेत्रोव 1 1 1 उत्पादन
2 इवान सिदोरोव 1 2 1 उत्पादन
3 पीटर इवानोव 1 2 1 उत्पादन
4 निकोलस पेत्रोव 1 3 1 उत्पादन
5 निकोलस इवानोव 2 1 2 वितरण
6 सेर्गेई सिदोरोव 2 3 2 वितरण
7 एंड्री बुकिन 2 2 2 वितरण
8 विजेता रिबाकोव 4 1 व्यर्थ व्यर्थ
सेलेक्ट * फ्रॉम यूजर्स राइट जॉइन डिपार्टमेंट्स ऑन यूजर्स.डिपार्टमेंटआईडी = डिपार्टमेंट्स.डिपार्टमेंटआईडी
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडीविभाग आईडीविभाग का नाम
1 इवान पेत्रोव 1 1 1 उत्पादन
2 इवान सिदोरोव 1 2 1 उत्पादन
3 पीटर इवानोव 1 2 1 उत्पादन
4 निकोलस पेत्रोव 1 3 1 उत्पादन
5 निकोलस इवानोव 2 1 2 वितरण
6 सेर्गेई सिदोरोव 2 3 2 वितरण
7 एंड्री बुकिन 2 2 2 वितरण
व्यर्थ व्यर्थ व्यर्थ व्यर्थ व्यर्थ 3 क्रय
सेलेक्ट * फ्रॉम यूजर्स फुल जॉइन डिपार्टमेंट्स ऑन यूजर्स.डिपार्टमेंटआईडी = डिपार्टमेंट्स.डिपार्टमेंटआईडी
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडीविभाग आईडीविभाग का नाम
1 इवान पेत्रोव 1 1 1 उत्पादन
2 इवान सिदोरोव 1 2 1 उत्पादन
3 पीटर इवानोव 1 2 1 उत्पादन
4 निकोलस पेत्रोव 1 3 1 उत्पादन
5 निकोलस इवानोव 2 1 2 वितरण
6 सेर्गेई सिदोरोव 2 3 2 वितरण
7 एंड्री बुकिन 2 2 2 वितरण
व्यर्थ व्यर्थ व्यर्थ व्यर्थ व्यर्थ 3 क्रय
8 विजेता रिबाकोव 4 1 व्यर्थ व्यर्थ
सेलेक्ट * फ्रॉम यूजर क्रॉस जॉइन डिपार्टमेंट्स
उपयोगकर्ता पहचानउपयोगकर्ता नामउपयोक्ताउपनामविभाग आईडीस्थिति आईडीविभाग आईडीविभाग का नाम
1 इवान पेत्रोव 1 1 1 उत्पादन
2 इवान सिदोरोव 1 2 1 उत्पादन
3 पीटर इवानोव 1 2 1 उत्पादन
4 निकोलस पेत्रोव 1 3 1 उत्पादन
5 निकोलस इवानोव 2 1 1 उत्पादन
6 सेर्गेई सिदोरोव 2 3 1 उत्पादन
7 एंड्री बुकिन 2 2 1 उत्पादन
8 विजेता रिबाकोव 4 1 1 उत्पादन
1 इवान पेत्रोव 1 1 2 वितरण
2 इवान सिदोरोव 1 2 2 वितरण
3 पीटर इवानोव 1 2 2 वितरण
4 निकोलस पेत्रोव 1 3 2 वितरण
5 निकोलस इवानोव 2 1 2 वितरण
6 सेर्गेई सिदोरोव 2 3 2 वितरण
7 एंड्री बुकिन 2 2 2 वितरण
8 विजेता रिबाकोव 4 1 2 वितरण
1 इवान पेत्रोव 1 1 3 क्रय
2 इवान सिदोरोव 1 2 3 क्रय
3 पीटर इवानोव 1 2 3 क्रय
4 निकोलस पेत्रोव 1 3 3 क्रय
5 निकोलस इवानोव 2 1 3 क्रय
6 सेर्गेई सिदोरोव 2 3 3 क्रय
7 एंड्री बुकिन 2 2 3 क्रय
8 विजेता रिबाकोव 4 1 3 क्रय
dpt.DepartmentName AS "डिपार्टमेंट", usr.UserName + "" + usr.UserSurname AS "यूज़र नेम", pos.PositionName AS "Position" FROM यूज़र्स AS usr.DepartmentID = dpt.DepartmentID बाएँ USr.PositionID = pos.PositionID आदेश पर dpt.DepartmentID, pos.PositionID द्वारा आदेश के रूप में स्थिति में शामिल हों
विभागउपयोगकर्ता नामपद
व्यर्थ विक्टर रयबाकोव प्रबंधक
उत्पादन इवान पेट्रोव प्रबंधक
उत्पादन इवान सिदोरोव वरिष्ठ विश्लेषक
उत्पादन पेट्र इवानोव वरिष्ठ विश्लेषक
उत्पादन निकोले पेत्रोव विश्लेषक
वितरण निकोले इवानोव प्रबंधक
वितरण एंड्री बुकिन वरिष्ठ विश्लेषक
वितरण सर्गेई सिदोरोव विश्लेषक

डेटा का परिवर्तन

सबसे पहले, डेटा बदलने के लिए कमांड के बारे में बात करते हैं, Transact-SQL बोली की बारीकियों को समझाना आवश्यक है। जैसा कि आप नाम से ही देख सकते हैं, संपूर्ण तंत्र लेन-देन पर आधारित है, अर्थात, संचालन के अनुक्रम पर, एक तार्किक मॉड्यूल में संयुक्त, जिसे डेटा संग्रह में फीड किया जाता है, डेटा को बदलें, या तालिका की संरचना . एक घंटे के लिए, डेटा स्क्रिप्ट में सभी लेन-देन अवरुद्ध हो जाते हैं, जो डेटा की असंगति को टेबल और पूर्ण स्क्रिप्ट के साथ काम के कोब पर एक घंटे के लिए छिपाने की अनुमति देता है।

ट्रांज़ैक्ट-एसक्यूएल लेन-देन के अनुसार, एक BEGIN ट्रांज़ेक्शन ... कमिट ट्रांज़ेक्शन संरचना पारित की जाती है। Tsyu संरचना vikoristovuvat neobov'yazkovo, लेकिन तब परिदृश्य के लिए सभी आदेश अपरिवर्तनीय हैं, इसलिए सामने काम करना असंभव है। लेन-देन ब्लॉक की संरचना समान है:

लेनदेन शुरू करें [मेरा लेनदेन] [ऑपरेशन] कमिट लेनदेन [मेरा लेनदेन] या रोलबैक लेनदेन [मेरा लेनदेन]

नीचे विजयी ब्लॉक का बट है:

सभी कर्मचारियों के लिए नया वेतन निर्धारित करें लेनदेन TR1 अद्यतन स्थिति सेट करें आधार वेतन = 25000000000000000 IF @@ERROR<>0 BEGIN RAISERROR("त्रुटि, लेन-देन पूरा नहीं हुआ!", 16,-1) रोलबैक ट्रांज़ेक्शन TR1 END अन्यथा कमिट ट्रांज़ेक्शन TR1

SQL सर्वर तालिका में डेटा सम्मिलित करने के लिए, INSERT INTO कमांड का उपयोग किया जाता है:

[तालिका का नाम] (स्तंभ) मानों में प्रवेश करें ([स्तंभ मान])

MS SQL Server 2003 के लिए कमांड का एक अन्य भाग obov'yazkovoy नहीं है, लेकिन बिना किसी शब्द के MS JET SQL में क्षमा सिंटैक्स दिखाई देगा। सम्मिलन को पंक्तियों में किया जाना चाहिए, ताकि तालिकाओं के सभी स्तंभों और मूल्यों को कमरे में इंगित किया जा सके, क्योंकि उनमें प्रवेश करना आवश्यक है। यदि किसी कॉलम में एक बंद के पीछे एक मान हो सकता है, या यदि यह एक खाली मान की अनुमति देता है, तो इन्सर्ट कमांड में इस कॉलम को छोड़ा जा सकता है। INSERT INTO कमांड आपको कॉलम के क्रम के लिए डेटा डालने की अनुमति भी देता है, लेकिन साथ ही कॉलम के क्रम को निर्दिष्ट करना आवश्यक है।

उपयोगकर्ता तालिका में, UserID = 9, UserName = "Nikolay", - UserSurname = "Gryzlov", DepartmentID = 4, स्थितिID = 2 के साथ एक पंक्ति डालें। उपयोगकर्ता मूल्यों में सम्मिलित करें (9, "निकोले", "Gryzlov", 4 , 2 ) -- उपयोगकर्ता तालिका में, डेटा के साथ एक पंक्ति डालें UserID = 10, UserName = "Nikolay", -- UserSurname = "Kozin", DepartmentID - प्रचार मूल्य, स्थिति - निर्दिष्ट नहीं। INSERT उपयोगकर्ता मूल्य (10, "निकोले", "कोज़िन", डिफॉल्ट, न्यूल) - उपयोगकर्ता तालिका में, डेटा के साथ एक पंक्ति डालें ​​उपयोगकर्ताओं में प्रवेश के लिए (उपयोगकर्ता नाम, उपयोगकर्ता नाम, उपयोगकर्ता आईडी) मूल्य ("गुस्सा", "मेदवेदेव", 11)

तालिका तालिका के मान को बदलने के लिए, UPDATE कमांड का उपयोग किया जाता है:

अद्यतन [तालिका का नाम] सेट [स्तंभ नाम] = [स्तंभ मान] जहां [उम]

अद्यतन (बदलें) तालिका के मूल्य को दिमाग से या किसी अन्य तालिका से डेटा के चयन के साथ पागलपन से किया जा सकता है।

सभी पदों के लिए 2000 यूनिट का वेतन निर्धारित करें। अद्यतन स्थिति सेट आधार वेतन = 2000 - आईडी 1 के साथ पोसाड्स वेतन को 2500 इकाइयों पर सेट करते हैं। अद्यतन स्थिति सेट आधार वेतन = 2500 जहां स्थिति आईडी = 1 - आईडी 2 के साथ पॉसड 30% से वेतन बदल देगा। अद्यतन स्थिति सेट आधार वेतन = आधार वेतन * 0.7 जहां स्थिति आईडी = 2 - सभी पॉसड्स को एक स्वस्थ वेतन पर सेट करें (प्रति संख्या 30,000 जोड़ें - संगठन में कर्मचारियों की सूची) अद्यतन स्थिति सेट आधार वेतन = 30000 / (उपयोगकर्ताओं से काउंट (उपयोगकर्ता आईडी) चुनें)

डेटा का दृश्य DELETE कमांड के साथ सेट किया गया है:

[तालिका का नाम] से हटाएं जहां [उमोवा]

Vydalennya danikh कॉल के माध्यम से कुछ कसौटी के लिए देखने के लिए। चूंकि डेटा को हटाना एक सुरक्षित ऑपरेशन नहीं है, इसलिए इस तरह के कमांड से पहले, सेलेक्ट कमांड के साथ टेस्ट सिलेक्शन बनाना सबसे अच्छा है, जैसे कि आपने इन डेटा का परिणाम देखा है, वे हटा दिए जाएंगे। आपको जितनी जरूरत हो, आप साहसपूर्वक SELECT को DELETE से बदल सकते हैं और डेटा को हटा सकते हैं।

पहचानकर्ता 10 के साथ चेकलिस्ट दृश्य - अपग्रेड मोड में, सेलेक्ट कमांड का उपयोग करने की सिफारिश की जाती है, - यह जानने के लिए कि क्या डेटा हटा दिया जाएगा: - सेलेक्ट यूजर आईडी फ्रॉम यूजर्स जहां यूजरआईडी = 10 उपयोगकर्ता इनर यूजर से विभागों में शामिल होते हैं। विभाग आईडी = विभाग .DepartmentID WHERE Departments.DepartmentName = "Production" -- सभी इनपुट के दृश्य उपयोगकर्ताओं से हटाएं

टिप्पणी! डेटा को फ़िल्टर करने के लिए बट पर एक निश्चित तालिका होती है। यदि आप आदेश में तालिकाओं के छिड़काव को पुनर्व्यवस्थित करना चाहते हैं, तो डेटा केवल तालिकाओं से हटा दिया जाएगा, जैसा कि DELETE शब्द के बाद इंगित किया गया है।

TRUNCATE TABLE टेबल क्लियर करने के लिए सबसे अच्छा कमांड है।

ट्रंकेट टेबल [तालिका का नाम]

सभी डेटा के दृश्य का एक उदाहरण:

उपयोगकर्ता तालिका साफ़ करें ट्रंकेट तालिका उपयोगकर्ता

Transact-SQL क्लॉक टेबल को लिखने की अनुमति देता है, ताकि डेटा बेस के साथ काम करने के लिए एक घंटे के लिए सर्वर की मेमोरी में टेबल बनाई जा सके। टिमचासोव टेबल मां हो सकती हैं-याक इम्या, लेकिन सिंबल # के साथ गण्डमाला बांधना शुरू करें।

टाइम टेबल बनाएं #TempTable, कॉपी और पेस्ट करें - टेबल के यूजरनेम कॉलम यूजर सेलेक्ट यूजरनेम इनटू #TempTable फ्रॉम यूजर्स - टाइम टेबल के सभी रिकॉर्ड्स को चुनें #TempTable सेलेक्ट करें *

प्रक्रियाओं और कार्यों को सहेजना

प्रक्रियाओं और कार्यों को SQL-ऑपरेटरों के एक सेट द्वारा सहेजा जाता है, जिसे सर्वर पर सहेजा जा सकता है। यदि स्क्रिप्ट सर्वर पर सहेजी जाती है, तो क्लाइंट को उसी ओकरे ऑपरेटरों को फिर से सेट नहीं करना पड़ेगा, बदबू बचाई गई प्रक्रिया पर वापस जा सकती है। परिस्थितियाँ, यदि प्रक्रियाओं से बचा जाना है, विशेष रूप से जटिल हैं:

  • कई क्लाइंट प्रोग्राम विभिन्न भाषाओं में लिखे गए हैं, या विभिन्न प्लेटफार्मों पर काम करते हैं, लेकिन डेटाबेस के साथ समान संचालन भी करते हैं।
  • बेजपेका एक प्राथमिक भूमिका निभाता है। बचत प्रक्रियाएं सभी मानक संचालनों के लिए प्रतिकूल हैं, जो बीच की सुरक्षा और सुरक्षा सुनिश्चित करती हैं, और प्रक्रियाएं त्वचा की सर्जरी के उचित पंजीकरण की गारंटी देती हैं। इस प्रकार की स्थापना के साथ, प्रोग्राम और ड्राइवर डेटाबेस तालिकाओं तक सीधी पहुँच नहीं लेते हैं और केवल विशिष्ट प्रक्रियाओं को चुन सकते हैं जो सहेजी जाती हैं।
  • क्लाइंट और सर्वर के बीच ट्रैफ़िक को कम करना आवश्यक है। सर्वर और क्लाइंट के बीच स्थानांतरित होने वाली जानकारी धीरे-धीरे कम हो जाती है, और डेटाबेस सर्वर सिस्टम पर बोझ बढ़ जाता है, जिससे सर्वर साइड पर डेटा प्रोसेसिंग से अधिक काम होता है।

एक निर्धारित प्रक्रिया का एक उदाहरण, किसका ध्यान रखा जाता है, और क्या कार्य करता है, क्या लिया जाता है:

सैलरी अपडेट फंक्शन क्रिएट प्रोसेस usp_UpdateSalary AS अपडेट पोजीशन SET BaseSalary = 2000 GO -- सैलरी अपडेट फंक्शन बनाया क्रिएट फंक्शन usf_GetName (@UserID int) रिटर्न varchar(255) + "" + UserSurname FROM Users WHERE UserID = @ UserID) END GO - - EXEC वेतन अद्यतन TestDatabase.dbo.usp_UpdateSalary -- आईडी 2 के साथ कर्मचारी का नाम बदलें, TestDatabase.dbo.usf_GetName(2) चुनें

फिर से, जिन प्रक्रियाओं और कार्यों का ध्यान रखा जाता है, वे एक लाभ देते हैं:

  • उत्पादकता;
  • सभी zapitіv के लिए zagalna तर्क;
  • यातायात परिवर्तन;
  • सुरक्षा - कोरिस्टुवाचेव तक पहुंच तालिका को नहीं, बल्कि प्रक्रिया को दी जाती है;

उत्पादकता

उत्पादकता बढ़ाने के लिए, एक स्वीडिश शराब पीने वाले के लिए, पेय की पंक्तियों को ढेर करने के लिए निम्नलिखित नियमों को याद रखें:

  • यूनिकोड नहीं - सूची के लिए आदेश चरणों के अंत में चुने जाते हैं, जो सर्वर पर यातायात को बढ़ाते हैं।
  • यूनिकेट लाइक - यह ऑपरेटर एकाधिक मिलान पैटर्न के लिए एक मिलान ऑपरेटर है, आवश्यक फ़िल्टरिंग चरणों की संख्या को कम करने के लिए एक निचला ऑपरेटर = है।
  • Zastosovuvaty सटीक टेम्पलेट्स pokuku - zastosuvannya symbolіv pіdstanovki zbіlshuє घंटे vykonannya zaputu, revіrki vsіh vіkh Variant_v_іnіnіv_іnіїіі स्थापना nіbnіbnі अतिरिक्त सर्वर संसाधनों के लिए oskіlki।
  • अनोखा आदेश - सॉर्टिंग कमांड आपको तालिका में पंक्तियों को एक पंक्ति में क्रमबद्ध करने की अनुमति देता है, जो परिणाम में बाधा उत्पन्न करेगा।

विटाली बोचकारोव

डेटासेट के प्रबंधन के लिए T-SQL भाषा को मान्यता प्राप्त है। अपराध बोध के कारणों के लिए, पारंपरिक भाषाओं की कोई विशिष्ट विशेषताएं नहीं हैं, जो प्रोग्रामिंग ऐड-ऑन के लिए आवश्यक हैं। चूंकि आप लंबे समय से ऐड-ऑन बनाने पर काम कर रहे हैं, तो गाना-गाना, टी-एसक्यूएल और अन्य भाषाओं जैसे वीबी, सी # और जावा में प्रोग्रामिंग के विचार का विरोध करें।

टी-एसक्यूएल पैकेज

एक टी-एसक्यूएल निर्देश को अनुरोध कहा जाता है, और उनमें से एक सेट को पैकेज कहा जाता है। पैकेज निर्देशों के पूरे अनुक्रम को सर्वर द्वारा क्लाइंट प्रोग्राम से एक एकल इकाई के रूप में हटा दिया जाता है।

SQL सर्वर पूरे पैकेज को देखता है जैसे कि वह अकेले काम कर रहा हो। एक क्षमा की उपस्थिति, यदि केवल एक निर्देश में, पूरे पैकेज को लपेटने की असंभवता का कारण बनती है। उसी समय, व्याकरणिक विश्लेषण वस्तुओं और योजनाओं के नाम नहीं बदलता है, लेकिन टाइपिंग निर्देशों की प्रक्रिया से ही योजना को बदला जा सकता है।

पैकेज पर दोबारा विचार कर रहे हैं

SQL स्क्रिप्ट फ़ाइल और क्वेरी एनालाइज़र विंडो में कुछ पैकेट हो सकते हैं। कई बार, सभी पैकेज टर्मिनेटर्स के कीवर्ड जोड़ते हैं। ज़मोवचुवन्यम त्सिम के लिए मुख्य शब्द є GO है, और एक पंक्ति में बुटी एकजुट हो सकती है। अन्य सभी प्रतीक (navit टिप्पणियाँ) पैकेज वितरक को बेअसर कर देंगे।

पैकेट वितरण वास्तव में प्रबंधन स्टूडियो का कार्य है, सर्वर का नहीं। आप इसे प्रोग्राम की शक्ति के क्वेरी निष्पादन संवाद बॉक्स के पक्ष में बदल सकते हैं, लेकिन मैं इसकी अनुशंसा नहीं करता (मित्रों को)।

डीडीएल निर्देश

कुछ DDL mov T-SQL स्टेटमेंट, जैसे क्रिएट प्रोसीजर, पैकेज में पहले निर्देश हैं। यहां तक ​​​​कि पुराने परिदृश्य, जो अवैयक्तिक वस्तुओं का निर्माण करते हैं, को अक्सर बहुत सारे रीपैकेजिंग पैकेजों की आवश्यकता होती है। SQL सर्वर oskіlki okremo संकुल के पीछे सिंटैक्स को पार्स करता है, अवैयक्तिक वितरकों की ऐसी उपस्थिति क्षमा को स्थानीय बनाने में मदद करती है।

डेटा बेस के बीच स्विच करना

कार्य मोड में, डेटा बेस हमेशा टूलबार पर प्रदर्शित होता है, और किसी बिंदु पर इसे बदला जा सकता है। प्रोग्राम कोड के लिए, थ्रेड बेस को कीवर्ड USE द्वारा परिभाषित किया गया है। पैकेज में कीवर्ड इंगित करता है कि प्रवाह बिंदु से शुरू करते हुए रोबोट किस डेटा बेस पर आधारित होगा:

जीतने वाले पैकेज

पैकेज का उपयोग dekilkom तरीकों से किया जा सकता है।

SQL स्क्रिप्ट सामान्य रूप से (ताकि सभी संकुल जो नए से पहले प्रवेश करते हैं) फ़ाइल के पथ द्वारा अनुसरण किया जा सकता है। प्रबंधन स्टूडियो के SQL संपादक में sql और कुंजियाँ दबाना (या तो बटन दबाकर! टूलबार का निष्पादन करें, या क्वेरी 1 का चयन करके मेनू में आइटम निष्पादित करें)। (मैंने अपना विंडोज ऑपरेटिंग सिस्टम सेट किया ताकि जब मैं फ़ाइल पर क्लिक करूं। SQL, संपूर्ण क्वेरी विश्लेषक स्वचालित रूप से प्रारंभ हो जाए।)

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

प्रोग्राम पैकेज T-SQL का उपयोग ADO या ODBC की मदद के लिए किया जा सकता है।

T-SQL स्क्रिप्टिंग के बारे में आप फ़ाइल नाम पास करने के लिए अतिरिक्त SQLCmd कमांड-लाइन उपयोगिता भी देख सकते हैं। एसक्यूएल याक पैरामीटर।

SQLCmd उपयोगिता में कुछ पैरामीटर हो सकते हैं और व्यावहारिक आवश्यकताओं के लिए आसानी से अनुकूलित किए जा सकते हैं।

SQLCmd उपयोगिता div के बारे में अतिरिक्त जानकारी। प्रबंधन स्टूडियो को समर्पित शाखा 6 में।

जानकारी

विकोनन्न्या प्रक्रियाएं जो ली जाती हैं

SQL पैकेज के लिए, सहेजी गई प्रक्रिया को exec कीवर्ड की सहायता से कॉल किया जाता है। नीच नियमों का पालन किसको करना चाहिए। SQL सर्वर के लिए Oskіlki razrivi ryadkіv का कोई मतलब नहीं है, exec कमांड का मतलब पिछले निर्देशों का अंत है।

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

सिस्टम प्रक्रिया के अगले दो विकी, जो चुने गए हैं, पैकेज में वैकल्पिक निष्पादन आदेश प्रदर्शित करते हैं:

EXEC sp_help;

जिन पर हमने विभाजन किया, हमने केवल पैकेज पर निष्पादन आदेश को देखा। मैं "डायनेमिक SQL" सेक्शन में कीवर्ड Yeses के निर्माता के बारे में जानकारी दूंगा।

टी-एसक्यूएल में स्वरूपण

पुस्तक के पाठ को खींचकर, सटीकता को कम करने के लिए प्रोग्राम कोड को स्वरूपित किया गया है; जिन पर हमने स्वरूपण के प्रमुख क्षणों को विभाजित किया है।

पूर्ण निर्देश

एएनएसआई एसक्यूएल मानक को त्वचा के निर्देशों में डॉट-टू-कोमा के उपयोग की आवश्यकता होती है। उसी समय, जब टी-एसक्यूएल mov पर प्रोग्रामिंग करते हैं, तो वह बिंदु जिसके साथ obov'yazkova नहीं है। किल्कोम के नियमों का पालन किसे करना चाहिए।

प्रयास समाप्ति कथन के बाद її न रखें।

आपके सोचने के बाद її पोस्ट न करें।

CTE के हीट-टेबल छंद के बाद obov'yazkovo її रखें।

प्रोग्राम कोड के सबसे कम रन के लिए, अभी भी एक क्लोड के साथ स्पेक को हरा करने की सिफारिश की जाती है। SQL सर्वर के भविष्य के संस्करणों में, यह अधिक जटिल हो सकता है, जो अधिक उन्नत कार्य हो सकता है।

प्रोडोवझेन्या रौकेव

निर्देश T-SQL अपने स्वभाव से ही शक्तिशाली हो सकता है। Deyakі zapitami शेष rasdіlu s chislennym ob'ednannymi और pіdzapitami पूरे पक्ष पर कब्जा कर लेते हैं। यह विशेष रूप से उचित है कि टी-एसक्यूएल पंक्ति के अंत में व्हाइटस्पेस वर्णों को अनदेखा करता है। त्से का अर्थ है कि वर्तमान निर्देश किसी विशेष प्रतीक की आवश्यकता के बिना आपत्तिजनक पंक्ति पर किया जा सकता है। यह शक्ति महत्वपूर्ण दुनिया को प्रोग्राम कोड की रीडिंग को स्थानांतरित करने की अनुमति देती है।

SQL के अन्य कार्यान्वयन में, जैसे कि एक्सेस, स्टेटमेंट को पूरा करने के लिए एक गांठ के साथ एक स्पेक की उपस्थिति की आवश्यकता होती है। SQL सर्वर कुछ बदलाव की अनुमति देता है, लेकिन भाषा की परवाह नहीं करता है।

टिप्पणियाँ

टी-एसक्यूएल भाषा का उपयोग दो शैलियों में टिप्पणियों के एक पैकेज में किया जा सकता है: एएनसीआई और चाल सी। पहला वाला दो हाइफ़न से शुरू होता है और पंक्ति के अंत में समाप्त होता है:

- एएनएसआई शैली पर टिप्पणी

साथ ही, ANSI शैली की टिप्पणियों को निर्देशों की एक पंक्ति की तरह सम्मिलित किया जा सकता है:

प्रथम नाम, अंतिम नाम का चयन करें - व्यक्तियों से कॉलम, जो चयनित हैं - आउटपुट तालिका

जहाँ LastName 'Hal%' जैसा है; - पंक्तियों में पंक्तिबद्ध

SQL संपादक सभी देखी गई पंक्तियों पर टिप्पणियां फ्रीज और देख सकता है। जिसके लिए आपको मेन्यू कमांड एडिट ^ एडवांस ^ कमेंट आउट ( या ) या संपादित करें ^ उन्नत 1 ^ टिप्पणियां हटाएं ( या ).

फिल्म सी की शैली पर टिप्पणियाँ तिरछी रेखाचित्रों और छोटे सितारों (/*) से शुरू होती हैं और मोड़ अनुक्रम पर समान प्रतीकों के साथ समाप्त होती हैं। इस प्रकार की टिप्पणियाँ पंक्तियों के ब्लॉक, जैसे शीर्षकों या महान परीक्षण अनुरोधों पर टिप्पणी करने के लिए सबसे अच्छा विकल्प है। /*

टेबल इंसर्ट ट्रिगर ऑर्डर पॉल नीलसन

शैली सी में टिप्पणियों का एक मुख्य आकर्षण वे हैं जिन्हें बिना टिप्पणी के उनमें लिखा जा सकता है।

टी-एसक्यूएल अनुकूलन

यदि SQL संपादक क्षमा दिखाता है, तो यह पैकेज में वर्ण और पंक्ति संख्या दिखाएगा। क्षमा पर क्लिक करने के बाद, आप तुरंत ऊपरी पंक्ति में जा सकते हैं।

क्षमा को समाप्त करने के लिए अक्सर गलत शब्द में तोड़ दिया जाता है, जैसा कि अनुस्मारक में नियुक्त किया गया था, - रास्ते में सबकुछ डालने के लिए, निर्देशों को मंजूरी दे दी गई थी। ध्वनि, वास्तव में, अगले महीने में जो आदेश दिया गया था, उसके बाद या बाद में बिना किसी देरी के क्षमा का भुगतान किया गया है - किसी भी मामले में, इसे ठीक अगले स्थान पर करने का आदेश दिया गया है।

SQL सर्वर पैकेजों को अपग्रेड करना आसान बनाने के लिए कमांड का एक गुच्छा बताता है। Zocrema, प्रिंट कमांड डेटा के परिणाम सेट को बनाए बिना अपडेट को ओवरपॉवर करता है। विशेष रूप से, मैं प्रिंट कमांड का सम्मान करता हूं क्योंकि पैकेज डीबग करने के लिए विशेष रूप से मूल्यवान है। यदि मांग विश्लेषक नेटवर्क मोड में है, तो अगला पैकेट चुनें:

डेटा का परिणामी सेट टेबल पर दिखाई देता है और एक पंक्ति में मुड़ा हुआ होता है। उसी समय, संदेश टैब अगला परिणाम दिखाएगा:

(1 पंक्ति प्रभावित)

कभी-कभी वस्तुओं की संख्या को ब्लॉक करने के लिए प्रोग्राम को सेट करना आवश्यक होता है। रोकें कमांड आपको बैच को एक घंटे की नौकरी के लिए रोकने की अनुमति देता है। उदाहरण के लिए, जब vikonannі आपत्तिजनक योग कोड दो सेकंड के ठहराव के बाद एक और पंक्ति दिखाई देती है:

प्रिंट 1 कोब";

देरी के लिए प्रतीक्षा करें *00:00:02′;

प्रिंट 'किनेट 1;

विकोनैनी कोड का परिणाम:

मुख्य बिंदु यह है कि सर्वर 2005 में SQL न्यू के प्रबंधन स्टूडियो संस्करण में T-SQL इंजन शामिल नहीं है, जो पैकेज में मौजूद है

2005 विजुअल स्टूडियो 2005

अद्यतन, मैं आपको इसके बारे में वेबसाइट www पर बताऊंगा। SQLServerBible. कॉम।

परिवर्तन

Be-yak mov vimagє timchasovogo zberezhennya के लिए जिसका अर्थ है zminnykh की याद में। T-SQL में परिवर्तन एक अतिरिक्त डिक्लेयर कमांड के बाद बनाए जाते हैं, जिसके बाद उनके परिवर्तन और प्रकार होते हैं। विभिन्न प्रकार के डेटा के लिए जीत तालिका में दी गई राशि से सटीक रूप से मेल खाती है। जिसमें आप एक तालिका प्रकार और एक SQLVariant प्रकार जोड़ सकते हैं। एक आदेश में, घोषणा करें कि परिवर्तन के एक डेकिलका को किसके द्वारा भुनाया जा सकता है।

परिवर्तन के लिए निर्दिष्ट क्षेत्र को लॉक करने का महत्व

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

आपत्तिजनक परिदृश्य में, दो परीक्षण परिवर्तन बनाए जाते हैं, जिसके साथ उन्हें प्रदर्शित किया जाता है, क्षेत्र को लॉकिंग के लिए मान दिया जाता है। पूरी स्क्रिप्ट एक फ़ाइल में है, हालाँकि तकनीकी दृष्टि से इसे दो पैकेजों में मोड़ा गया है (GO कमांड द्वारा अलग किया गया है)। स्क्रिप्ट के तुरंत बाद, तीन सेलेक्ट स्टेटमेंट दिखाए जाते हैं:

घोषणा @Test INT,

@TestTwo NVARCHAR(25);

चयन करें @ टेस्ट, @ टेस्ट दो;

सेट @TestTwo = 'मान';

चयन करें @ परीक्षण, @ परीक्षण दो;

बैचटू के रूप में @Test का चयन करें, @TestTwo;

(1 पंक्ति प्रभावित)

1 मान

(1 पंक्ति प्रभावित)

Msg 137, Level 15, State 2, Line 2 को स्केलर वैरिएबल "@Test" घोषित करना चाहिए।

पहला सेलेक्ट स्टेटमेंट दो खाली मानों को घुमाता है। उसके बाद, जैसे ही परिवर्तन आरंभ किए गए, बदबू असाइन किए गए मानों को बदल देती है। जब अग्रिम चयन निर्देश के परिणामस्वरूप पैकेज पूरा हो जाता है, क्षमा #137 अधिसूचित किया जाता है।

असाइनमेंट के स्थानीय क्षेत्र में परिवर्तन किए जा सकते हैं, ताकि सहेजी गई प्रक्रियाओं को अन्य पैकेजों तक विस्तारित न किया जा सके।

सेट और सेलेक्ट कमांड का वेरिएंट

परिवर्तनों को मान निर्दिष्ट करने के लिए SET और SELECT कमांड का उपयोग किया जा सकता है। उनके बीच मुख्य विशेषताएं यह हैं कि SELECT कमांड डेटाबेस (जैसे टेबल, डेटा, डेटा, आदि) से जानकारी निकाल सकता है और अन्य SELECT निर्देशों को शामिल कर सकता है, जबकि SET कमांड iraziv. एक की तरह, तो दूसरी टीम फ़ंक्शन को बदल सकती है। SET कमांड का उपयोग करें यदि आपको फ़ंक्शन, या एक स्थिरांक के लिए एक चर परिणाम निर्दिष्ट करने की आवश्यकता है और आपको डेटा देखने की आवश्यकता नहीं है।

सेलेक्ट स्टेटमेंट कई प्रविष्टियों से मान ले सकता है। त्वचा के घावों का मूल्य परिवर्तन को सौंपा जा सकता है। जैसे ही सेलेक्ट स्टेटमेंट पंक्तियों की पंक्ति को स्थानांतरित करता है, शेष पंक्तियों के मान बदल जाते हैं। व्यक्तिगत पहचानकर्ता के क्षेत्र द्वारा आदेशित 32 पंक्तियों में चयन निर्देश आ रहा है। उसी समय, कोड बदल दिया जाता है, और सूची में बाकी लोगों का नाम नहीं रह जाता है:

घोषणा ©TempID INT,

@TempLastName वर्चर (25);

सेट@TempID=99;

@TempID=व्यक्ति पहचान,

@TempLastName = LastName

व्यक्ति आईडी द्वारा आदेश;

विकोनन्न्या पैकेज का परिणाम:

32 @ कोड बाकी: कैंपबेल

नुकीले बट पर, क्षमा को बढ़ा दिया गया है। का। परिवर्तनों को भरने के लिए SELECT स्टेटमेंट को दोबारा चेक न करें, क्योंकि आपको नहीं लगता कि डेटा का परिणामी सेट एक से अधिक पंक्तियों को जोड़ेगा। किसी अन्य अवसर पर, आप श्रद्धांजलि की केवल शेष पंक्ति से ही संतुष्ट हो जाएंगे।

यदि SELECT स्टेटमेंट एक ही पंक्ति को घुमाता नहीं है, तो यह नहीं बदलता है। अगला अनुरोध मूल्य को घुमाता नहीं है, पहचानकर्ता 100 वाले रिकॉर्ड व्यक्ति तालिका में मौजूद नहीं हैं। @TempIDvariable को बदलने के कारणों के लिए, हम शेष आवश्यक पंक्ति के मूल्य की आशा करते हैं, वरीयता बदलते समय, हम खाली मान लेते हैं:

@TempID INT घोषित करें,

@TempLastName वर्चर (25);

सेट@TempID=99;

@TempID का चयन करें = व्यक्ति आईडी,

@TempLastName = व्यक्ति का अंतिम नाम जहां व्यक्ति आईडी = व्यक्ति आईडी द्वारा 100 आदेश;

@TempID, @TempLastName चुनें;

99 @ कोड अंतिम: NULL

उमोवनी विद्बिर

अगला चयन कथन WHERE प्रस्ताव को प्रतिस्थापित करने के लिए है और सिंटैक्स सही है, हालांकि यह उनके लिए अस्पष्ट लग सकता है:

सेलेक्ट @ चेंज = विराज जहां बूलियन-विराज;

कई बार WHERE क्लॉज स्मार्ट if स्टेटमेंट की तरह काम करता है। यदि सत्य है, तो परिवर्तन मान असाइन किया गया है, अन्यथा चयन कथन ओवरराइड किया गया है, लेकिन परिवर्तन मान नहीं बदला गया है।

SQL क्वेरी में परिवर्तन का संस्करण

टी-एसक्यूएल भाषा के अधिकारियों के मेरे पसंदीदा में से एक वे हैं जिन्हें फोल्डिंग डायनेमिक पंक्तियों को ढहाए बिना अनुप्रयोगों में बदला जा सकता है, जिन्हें प्रोग्राम कोड में बदला जाएगा। डायनेमिक एसक्यूएल अपने स्वयं के आधार को जारी रखता है, लेकिन आप परिवर्तनों की सहायता के लिए मूल्यों को एक सरल तरीके से बदल सकते हैं।

Skrіz, de zapі विजयी viraz कर सकते हैं, जीत सकते हैं और बदल सकते हैं। स्टेपिंग बट पर, परिवर्तन के प्रतिस्थापन को प्रस्ताव में प्रदर्शित किया गया था: USE OBXKites;

घोषणा @ProductCode CHAR(10);

सेट @ कोड = '1001';

उत्पाद से उत्पाद का नाम चुनें

जहां कोड = @ProductCode;

परिणाम अस्वीकार कर दिया जाएगा:

बेसिक बॉक्स पतंग 21 इंच

कई कार्यों के साथ परिवर्तन

एकाधिक असाइनमेंट के साथ परिवर्तन - यह एक शत्रुतापूर्ण तरीका है जो आपको अतिरिक्त चयन निर्देशों और सदस्यता के लिए स्वयं में परिवर्तन जोड़ने की अनुमति देता है।

जिन्हें वास्तविक जीवन से कम संख्या में आवेदन दिखाए जाएंगे। हालाँकि, सरलता के लिए, चयन कथन, मुझे मूल रूप से प्रस्तुत करना चाहिए:

सेलेक्ट @ चेंज = @ चेंज + डी। स्टोवेट FROM(kerowan_table) as d;

सिरेमिक तालिकाओं की एक चमड़े की पंक्ति को परिवर्तन में जोड़ा जाता है, ऊर्ध्वाधर रेखा को क्षैतिज सूची में बदल दिया जाता है।

इस प्रकार का पूर्वाभास अक्सर व्यावहारिक होता है। दूसरे शब्दों में, लंबवत सूची को अधिक आसानी से गांठों द्वारा विभाजित क्षैतिज सूची में परिवर्तित किया जा सकता है, उपशीर्षक को कुछ इंच तक बढ़ाया जा सकता है। छोटी क्षैतिज सूचियाँ लोगों द्वारा आसानी से स्वीकार कर ली जाती हैं, और स्थान भी बचाती हैं।

आउटर बैंक्स लाइटहाउस टूर के लिए तारीखों की एक सूची आक्रामक बट पर बनाई गई है, जो केप हैटर के प्रमुख डेटाबेस में विज्ञापन उद्यमों के रूप में दिखाई गई है:

@इवेंटडेट्स वचरर (1024);

सेट @इवेंटडेट्स = '';

चुनें ©इवेंटडेट्स = @इवेंटडेट्स + कन्वर्ट (वचर (15), विज्ञापन, 107) + '

FROM (इवेंट ज्वाइन टूर से [d] के रूप में DateBegin चुनें

ऑन इवेंट.टूरआईडी = टूर.टूरल्ड व्हेयर टूर। = 'बाहरी बैंक प्रकाशस्तंभ') एक के रूप में;

सेलेक्ट लेफ्ट(@EventDates, लेन(@EventDates)-1)

एएस 'आउटर बैंक्स लाइटहाउस इवेंट्स';

विकोनन्न्या पैकेज का परिणाम:

आउटर बैंक्स लाइटहाउस इवेंट्स

संख्यात्मक असाइनमेंट के साथ संख्याओं को बदलने की समस्या यह है कि असामान्य डेटा के सही क्रम की गारंटी है। चूंकि गैर-दस्तावेज़ीकरण की यह विधि एक नौटंकी की तरह दिखती है, आप SQL सर्वर की पूर्ण प्रतिभा का दावा नहीं कर सकते। दिन की नियुक्तियों के स्मरणोत्सव के लिए प्रोटीन विन को लाल झंडे के रूप में दिखाया जा सकता है (मुझे कर्सर ओवरराइड दिखाई देता है)।

Leran2002 9 अप्रैल, 2015 12:31 बजे

सीखने वाला एमएस एसक्यूएल सर्वर की बोली का उपयोग करके एसक्यूएल (डीडीएल, डीएमएल) सीखता है। पर्च का हिस्सा

  • एसक्यूएल,
  • माइक्रोसॉफ्ट एसक्यूएल सर्वर
  • ट्यूटोरियल

किस बारे में यह सहायक

Tsey podruchnik є shchos on kshtalt "मेरी स्मृति की मुहर के लिए" z mov SQL (DDL, DML), tobto। यह जानकारी, जैसा कि पेशेवर गतिविधि की प्रक्रिया में जमा हुई है, मेरे सिर में लगातार एकत्र होती है। मेरे लिए पर्याप्त न्यूनतम है, जो डेटा बेस के साथ काम करते समय सबसे आम है। अधिक नए SQL निर्माणों को पोस्ट करने की आवश्यकता के कारण, मैं MSDN लाइब्रेरी में मदद माँगता हूँ और इसे इंटरनेट पर डालता हूँ। मेरी राय में, सब कुछ अपने दिमाग में सहजता से लें, कि किसी को विशेष रूप से ज्यादा जरूरत नहीं है। अले मुख्य निर्माणों को जानने के लिए और भी बेहतर है, क्योंकि बदबू zastosovnі व्यावहारिक रूप से इस तरह के एक समृद्ध संबंधपरक डेटा बेस में, जैसे Oracle, MySQL, Firebird से। विदिमनोस्ती मुख्य रूप से डेटा के प्रकार से संबंधित हैं, लेकिन उन्हें विवरण द्वारा संशोधित किया जा सकता है। SQL भाषा का मुख्य निर्माण इतना समृद्ध नहीं है, और निरंतर अभ्यास के लिए, बदबू जल्दी भूल जाती है। उदाहरण के लिए, ऑब्जेक्ट (टेबल, इंडेक्स, इंडेक्स इत्यादि) बनाने के लिए, डेटा बेस के साथ काम करने के लिए टेक्स्ट एडिटर (आईडीई) डेटा बेस के साथ काम करने के लिए पर्याप्त है, और इसके साथ काम करने के लिए विज़ुअल टूल का उपयोग करने की कोई आवश्यकता नहीं है एक विशिष्ट प्रकार का डेटाबेस (MS SQL), Oracle, MySQL, Firebird, ...)। यह आसान है कि पूरा पाठ आपकी आंखों के सामने है, और उदाहरण के लिए, इंडेक्स या एक्सचेंज बनाने के लिए संख्यात्मक टैब के माध्यम से सॉर्ट करना आवश्यक नहीं है। डेटा बेस के साथ पोस्ट-वर्क के मामले में, अतिरिक्त स्क्रिप्ट के लिए ऑब्जेक्ट बनाएं, बदलें और विशेष रूप से फिर से बनाएं, यह विज़ुअल मोड में और भी तेज़ी से, और भी कम दिखाई देगा। इसके अलावा, स्क्रिप्टिंग मोड में (vіdpovіdno, उचित सटीकता के लिए), नामकरण वस्तुओं (मेरे व्यक्तिपरक विचार) के नियमों को सेट करना और नियंत्रित करना आसान है। इससे पहले, स्क्रिप्ट को अलग-अलग समय पर मैन्युअल रूप से ट्विक किया जा सकता है, यदि आप बदलते हैं, एक डेटाबेस में घूमने के लिए (उदाहरण के लिए, एक परीक्षण), इसे इस तरह से दूसरे डेटाबेस (उत्पादक) में स्थानांतरित करना आवश्यक है।

Mova SQL को कुछ भागों में विभाजित किया गया है, यहाँ मैं 2 सबसे महत्वपूर्ण भागों को देखूँगा:
  • डीएमएल - डेटा हेरफेर भाषा
    • चयन - डेटा का चयन
    • INSERT - नया डेटा डालें
    • अद्यतन - डेटा अद्यतन
    • DELETE - डेटा हटाएं
    • मर्ज - गुस्से में डैनिच
क्योंकि मैं एक व्यवसायी हूं, क्योंकि इस तरह का सिद्धांत किसी दिए गए सहायक के लिए पर्याप्त नहीं होगा, और सभी निर्माणों को व्यावहारिक बट्स पर समझाया गया है। तब तक, मुझे परवाह है कि भाषा प्रोग्रामिंग, और विशेष रूप से एसक्यूएल, केवल अभ्यास में महारत हासिल कर सकते हैं, इसका अध्ययन कर सकते हैं और समझ सकते हैं कि क्या सीखना है, यदि आप उस अन्य डिज़ाइन को जीतते हैं।

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

इस सहायक के लिखने से ठीक पहले, MS SQL Server संस्करण 2014 के डेटाबेस पर प्रश्न किया गया था, स्क्रिप्ट टाइप करने के लिए, मैंने MS SQL सर्वर प्रबंधन स्टूडियो (SSMS) से प्रश्न किया था।

एमएस एसक्यूएल सर्वर प्रबंधन स्टूडियो (एसएसएमएस) के बारे में संक्षेप में

SQL सर्वर प्रबंधन स्टूडियो (SSMS) डेटाबेस घटकों को कॉन्फ़िगर करने, प्रबंधित करने और प्रशासित करने के लिए Microsoft SQL सर्वर के लिए एक उपयोगिता है। यह उपयोगिता स्क्रिप्ट एडिटर (जो मूल रूप से हमारे द्वारा उपयोग की जाएगी) और ग्राफिक प्रोग्राम को बदल देगी जो ऑब्जेक्ट्स के साथ काम करता है और सर्वर को ट्वीक करता है। SQL सर्वर प्रबंधन स्टूडियो का मुख्य उपकरण ऑब्जेक्ट एक्सप्लोरर है, जो आपको सर्वर ऑब्जेक्ट्स की समीक्षा करने, देखने और उन्हें संजोने की अनुमति देता है। यह पाठ अक्सर विकिपीडिया से संदर्भित होता है।

नया स्क्रिप्ट संपादक बनाने के लिए, नई क्वेरी बटन पर क्लिक करें:

स्ट्रीमिंग डेटा बेस को बदलने के लिए, आप जो सूची देखते हैं उसे घुमा सकते हैं:

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

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

यहां पर निशाना साधने के उद्देश्य से हमें जो कुछ जानने की जरूरत है, वह सब ठीक है। एसएसएमएस उपयोगिता के लिए रेश्ता स्वतंत्र रूप से सीखने के लिए बहुत महत्वपूर्ण नहीं है।

ट्रॉकी सिद्धांत

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

DBMS - डाटा बेस मैनेजमेंट सिस्टम, tobto। एक विशिष्ट प्रकार के डेटाबेस (MS SQL, Oracle, MySQL, Firebird, ...) के साथ काम करने के लिए उपकरणों का tse जटिल।

टिप्पणी
क्योंकि जीवन में, रोमन भाषा में, हम कहते हैं: "ओरेकल डीबी", या बस "ओरेकल" कहते हैं, वास्तव में "ओरेकल डीबीएमएस" की तरह लग रहा है, फिर इस सहायक के संदर्भ में, डीबी शब्द का प्रयोग कभी-कभी किया जाता है। संदर्भ से, मेरी राय में, इसके बारे में स्वयं जाना उचित होगा।

मेज Stovptsі, इसलिए वे खुद को फ़ील्ड या कॉलम कह सकते हैं, सभी शब्द पर्यायवाची के रूप में विजयी होंगे, जो वे खुद से कहते हैं।

तालिका RDB की मुख्य वस्तु है, RDB के सभी डेटा को तालिका के कॉलम में एक पंक्ति में लिया जाता है। पंक्तियाँ, अभिलेख - पर्यायवाची भी।

त्वचा तालिकाओं के लिए, जैसे और її stovptsіv, नाम दिए गए हैं, उनसे पहले किस तरह के साल।
MS SQL में ऑब्जेक्ट नाम (टेबल का नाम, कॉलम का नाम, इंडेक्स का नाम) की अधिकतम लंबाई 128 वर्ण हो सकती है।

अंतिम रूप देने के लिए- DB Oracle ऑब्जेक्ट नाम में अधिकतम 30 वर्ण हो सकते हैं। इसलिए, किसी विशेष डेटाबेस के लिए, वर्णों की संख्या की सीमा में फिट होने के लिए वस्तुओं के नामकरण के लिए अपने स्वयं के नियमों को संशोधित करना आवश्यक है।

SQL - भाषा जो आपको DBMS के सामने डेटाबेस में लिखने की अनुमति देती है। एक विशिष्ट DBMS के लिए, भाषा SQL का एक विशिष्ट कार्यान्वयन (अपनी बोली) हो सकता है।

DDL और DML - SQL मूवी का सबसेट:

  • Mova DDL डेटाबेस की संरचना को संशोधित करने से पहले सेवा करता है, tobto। तालिकाएँ और लिंक बनाने/बदलने/प्रदर्शित करने के लिए।
  • मोवा डीएमएल आपको तालिकाओं, टोबटो से डेटा में हेरफेर करने की अनुमति देता है। ज її पंक्तियाँ। जीत आपको तालिकाओं से डेटा का चयन करने, तालिकाओं में नया डेटा जोड़ने और प्रासंगिक डेटा को अपडेट करने और देखने की अनुमति देता है।

मूव SQL में 2 प्रकार की टिप्पणियाँ हो सकती हैं (एकल-पंक्ति और एकाधिक-पंक्ति):

एकल पंक्ति टिप्पणी
і

/ * बग क्रमसूचक टिप्पणी */

Vlasne, सिद्धांत के लिए सब कुछ पर्याप्त होगा।

डीडीएल - डेटा डेफिनिशन लैंग्वेज

उदाहरण के लिए, आइए एक प्रोग्रामर के मामले में स्पिवोबिटनिकोव के बारे में डेटा के साथ तालिका देखें, जो є नहीं है:

तालिकाओं के विभिन्न स्तंभों में निम्नलिखित नाम हो सकते हैं: कार्मिक संख्या, पीआईबी, जन्म तिथि, ई-मेल, पोसाडा, Vіddіl।

इन स्टोवप्ट्सिव की त्वचा को उस प्रकार के डेटा की विशेषता हो सकती है जिसे नए में बदला जाना है:

  • कार्मिक संख्या - पूर्ण संख्या
  • पीआईबी - पंक्ति
  • जन्म तिथि - तारीख
  • ई-मेल - पंक्ति
  • पोसाडा - पंक्ति
  • विदिल - पंक्ति
Stovptsya प्रकार - एक विशेषता, उन लोगों के बारे में कैसे बात करें, yakі danі dans stovpets को बचा सकते हैं।

शुरुआत के लिए, यह केवल ऐसे मूल प्रकार के डेटा को याद रखने के लिए पर्याप्त होगा जो MS SQL में प्रतिष्ठित हैं:

कीमत एमएस एसक्यूएल द्वारा नामित विवरण
परिवर्तन गृह की पंक्ति वर्कर (एन)
і
नवरचर (एन)
अतिरिक्त संख्या N के लिए, हम एक दोहरी पंक्ति के लिए पंक्ति की अधिकतम संभावित लंबाई इंगित कर सकते हैं। उदाहरण के लिए, यदि आप यह कहना चाहते हैं कि "PIB" मान में अधिकतम 30 वर्ण हो सकते हैं, तो आपको nvarchar(30) प्रकार निर्दिष्ट करना होगा।
varchar और nvarchar के बीच का अंतर यह है कि varchar आपको ASCII प्रारूप से पंक्तियों को सहेजने की अनुमति देता है, जहाँ एक वर्ण 1 बाइट लेता है, और nvarchar यूनिकोड प्रारूप से पंक्तियाँ लेता है, जब एक वर्ण 2 बाइट लेता है।
वर्चर प्रकार केवल इस तरह से चुना जा सकता है कि आप 100% सुनिश्चित हैं कि इस क्षेत्र में यूनिकोड वर्णों को सहेजना आवश्यक नहीं है। उदाहरण के लिए, ईमेल पते को सहेजने के लिए वर्कर का उपयोग किया जा सकता है, क्योंकि बदबू ASCII वर्णों से अधिक गाती है।
निश्चित डोजिना की पंक्ति चार (एन)
і
एनचार (एन)
परिवर्तनशील dozhina की पंक्ति में, इस प्रकार को समान माना जाता है, कि dozhina की पंक्ति N वर्णों से कम है, इसे हमेशा दाएं हाथ से dozhina N द्वारा रिक्त स्थान के साथ पूरक किया जाएगा और दृष्टि में डेटाबेस से लिया जाएगा , टोटो। यह डेटाबेस से ठीक N वर्ण लेता है (एक वर्ण char के लिए 1 बाइट और nchar प्रकार के लिए 2 बाइट्स लेता है)। व्यवहार में, इस प्रकार को शायद ही कभी भीड़भाड़ के रूप में जाना जाता है, और यह आमतौर पर जीतता है, यह चार (1) प्रारूप में अधिक महत्वपूर्ण रूप से जीतता है। यदि फ़ील्ड एक वर्ण है।
पूरा नंबर int यहाँ डेनिश प्रकार हमें सकारात्मक और नकारात्मक दोनों तरह की एक पूरी संख्या से अधिक स्टोवपति में गाने की अनुमति देता है। अंतिम रूप देने के लिए (यह अब हमारे लिए इतना महत्वपूर्ण नहीं है) - संख्याओं की श्रेणी जो इंट टाइप -2 147 483 648 से 2 147 483 647 की अनुमति देती है। मुख्य प्रकार का नाम दें, जिसका उपयोग पहचानकर्ताओं को सेट करने के लिए किया जाता है।
भाषण ची deisne संख्या तैरना सीधी भाषा में बात करें तो ये वो अंक हैं, जिनमें एक दर्जन डॉट्स (कोमा) हो सकते हैं।
तारीख तारीख यदि स्टोव पर केवल दिनांक सहेजना आवश्यक है, क्योंकि यह तीन गोदामों से जमा होता है: संख्याएँ, महीने और रोकू। नेप्रिकलाड, 02/15/2014 (भयंकर 15, 2014)। डेनिश प्रकार को "स्वीकृति की तिथि", "जन्म तिथि", आदि के लिए चुना जा सकता है। शांत स्थितियों में, अगर हमारे लिए तारीख तय करना महत्वपूर्ण है, लेकिन अगर गोदाम का समय हमारे लिए महत्वपूर्ण नहीं है, तो हम इसे छोड़ सकते हैं या हम इसे नहीं देख सकते हैं।
घंटा समय डेनिश प्रकार को पीटा जा सकता है, इसलिए स्टोव, टोबो से दिए गए घंटे से अधिक समय बचाना आवश्यक है। वर्ष, ख्विलिनी, सेकंड और मिलीसेकंड। उदाहरण के लिए, 17:38:31.3231603
उदाहरण के लिए, प्रसिद्ध "उड़ान के प्रस्थान का घंटा।"
उस घंटे की तारीख दिनांक समय यह प्रकार एक ही समय में दिनांक और समय दोनों को सहेजने की अनुमति देता है। उदाहरण के लिए, 02/15/2014 05:38:31.323 अपराह्न
बट के लिए, आप कर सकते हैं लेकिन तारीख उसी घंटे की है जितनी होनी चाहिए।
प्रपोर अंश डेनिश प्रकार मैन्युअल रूप से "Tak" / "Hi" के मान को बचाने के लिए सेट किया गया है, de "Tak" को 1 के रूप में लिया जाता है, और "Hi" को 0 के रूप में लिया जाता है।

तो फ़ील्ड का मान ही, भले ही इसे फेंस नहीं किया गया हो, निर्दिष्ट नहीं किया जा सकता है, फ़ील्ड के मान के लिए, कीवर्ड NULL चुना गया है।

एप्लिकेशन के प्रयोजनों के लिए, टेस्ट नामक टेस्ट डेटाबेस बनाएं।

निम्नलिखित आदेश चलाकर एक साधारण डेटाबेस (अतिरिक्त पैरामीटर निर्दिष्ट किए बिना) बनाया जा सकता है:

डेटाबेस टेस्ट बनाएं
आप कमांड के साथ डेटा बेस देख सकते हैं (हम आपको इस कमांड से भी बचाएंगे):

ड्रॉप डाटाबेस टेस्ट
हमारे डेटा बेस पर जाने के लिए, आप कमांड का उपयोग कर सकते हैं:

यूएस टेस्ट
अन्यथा, एसएसएमएस मेनू क्षेत्र में सूची से टेस्ट डेटाबेस का चयन करें। मेरे साथ काम करते समय, मैं अक्सर आधारों के बीच स्विच करने की विधि से जीतता हूं।

अब हम अपने डेटाबेस में एक टेबल बना सकते हैं, vicorist विवरण बदबू की तरह दिखते हैं, vicorist ने उन सिरिलिक वर्णों को लिखा है:

क्रिएट टेबल [रिकॉर्डर्स] ([कार्मिक संख्या] इंट, [पीआईबी] नवरचर (30), [पॉप डेट] तारीख, नवरचर (30), [पोसाडा] नवारचर (30), [विदिल] नवारचर (30))
इस अवसर पर, हम वर्ग धनुष […] पर नाम रखते हैं।

इसके अलावा, डेटाबेस में अधिक स्पष्टता के लिए, वस्तुओं के सभी नाम लैटिन में अधिक संक्षेप में सेट किए जाने चाहिए और ग्लेड के नाम पर नहीं गाए जाने चाहिए। MS SQL में, ध्वनि एक ही समय में एक बड़े अक्षर से शुरू होती है, उदाहरण के लिए, "कार्मिक संख्या" फ़ील्ड के लिए, हम कार्मिक संख्या नाम सेट कर सकते हैं। साथ ही, नाम को संख्याओं के साथ घुमाया जा सकता है, उदाहरण के लिए, PhoneNumber1।

टिप्पणी
कुछ DBMS के लिए, हम "PHONE_NUMBER" नाम के मौजूदा प्रारूप को छोटा कर सकते हैं, उदाहरण के लिए, यह प्रारूप अक्सर ORACLE डेटाबेस में उपयोग किया जाता है। स्वाभाविक रूप से, फ़ील्ड का नाम सेट करते समय, DBMS में चुने गए कीवर्ड से बचना आवश्यक नहीं है।

किसी कारण से, आप वर्ग मेहराब के साथ सिंटैक्स के बारे में भूल सकते हैं और तालिका [Spivrobitniki] देख सकते हैं:

ड्रॉप तालिका
उदाहरण के लिए, 3 कर्मचारियों वाली तालिका को "कर्मचारी" कहा जा सकता है, और її फ़ील्ड को निम्नलिखित नाम दिए जा सकते हैं:

  • आईडी - कार्मिक संख्या (कॉल करने वाले की पहचानकर्ता)
  • नाम - पीआईबी
  • जन्मदिन - जन्मदिन की तारीख
  • ईमेल
  • पद - पोसाडा
  • विभाग - विदिल
पहचानकर्ता क्षेत्र के लिए सबसे आम नाम शब्द आईडी है।

अब हम अपनी तालिका बनाते हैं:

क्रिएट टेबल कर्मचारी (आईडी int, नाम nvarchar(30), जन्मदिन की तारीख, ईमेल nvarchar(30), स्थिति nvarchar(30), विभाग nvarchar(30))
स्टोवपी के लिए तार सेट करने के लिए, आप NOT NULL विकल्प का उपयोग कर सकते हैं।

पहले से ही मूल तालिका के लिए, आक्रामक आदेशों की सहायता से फ़ील्ड को फिर से असाइन किया जा सकता है:





























आईडी फील्ड अपडेट ALTER TABLE कर्मचारी ALTER COLUMN ID int NOT NULL

टिप्पणी
अधिकांश DBMS के लिए SQL mov की मुख्य अवधारणा को वही छोड़ दिया गया है (मैं इस DBMS के बारे में न्याय कर सकता हूं, जिसके लिए मुझे सुधार करने का मौका मिला था)। विभिन्न डीबीएमएस में डीडीएल परिभाषा मुख्य रूप से डेटा प्रकारों से संबंधित है (यहां, न केवल उनके नाम, बल्कि उनके कार्यान्वयन के विवरण की समीक्षा की जा सकती है), इसलिए इसकी तीन बार समीक्षा की जा सकती है और एसक्यूएल भाषा कार्यान्वयन की बहुत विशिष्टताएं (यह आज्ञाओं का सार एक और एक ही है, लेकिन वे बोली में छोटे अंतर हो सकते हैं, दुर्भाग्य से, एक मानक नहीं है)। SQL के बेसिक्स के साथ आप एक DBMS से दूसरे में स्विच कर सकते हैं, क्योंकि आपको नए DBMS में कमांड के कार्यान्वयन के विवरण के बारे में अधिक जानने की आवश्यकता है। ज्यादातर मामलों में, यह केवल एक सादृश्य बनाने के लिए पर्याप्त होगा।

तालिका निर्माण तालिका कर्मचारी बनाएं (आईडी इंट, - ओरेकल प्रकार इंट में - संख्या के बराबर (38) नाम nvarchar2(30), - ओरेकल में nvarchar2 MS SQL जन्मदिन की तारीख में nvarchar के बराबर, ईमेल n, स्थिति nvarchar2 (30) , विभाग nvarchar2(30)); - अद्यतन फ़ील्ड आईडी और नाम (यहाँ ALTER COLUMN को MODIFY (...) द्वारा प्रतिस्थापित किया गया है) ALTER TABLE कर्मचारियों को संशोधित करें (ID int NOT NULL, Name nvarchar2(30) NOT NULL); - पीके जोड़ें (एमएस एसक्यूएल में निर्माण किस तरह दिखता है, यह नीचे दिखाया जाएगा) एल्टर टेबल कर्मचारी एडीडी कॉन्स्ट्रेन पीके_कर्मचारी प्राथमिक कुंजी (आईडी);
ORACLE є vіdminnostі vіdminnostі vіdmіnnostі vіdіnії के कार्यान्वयन के लिए varchar2 टाइप करें, yogo कोडिंग गिरावट में lаshtuvan db में टेक्स्ट को सहेजा जा सकता है, उदाहरण के लिए, UTF-8 कोडिंग में। सबसे पहले, ORACLE में फ़ील्ड लंबाई को बाइट्स और वर्णों दोनों में सेट किया जा सकता है, जिसके लिए अतिरिक्त विकल्प BYTE और CHAR निर्दिष्ट किए गए हैं, जो फ़ील्ड लंबाई के बाद निर्दिष्ट किए गए हैं, उदाहरण के लिए:

NAME varchar2(30 BYTE) -- 30 बाइट्स तक का क्षेत्र दायरा NAME varchar2(30 CHAR) -- 30 वर्णों तक का क्षेत्र स्थान
एक विकल्प के रूप में, इसे डेटाबेस में स्टोर करने के लिए ORACLE प्रकार varchar2(30) में एक साधारण प्रविष्टि के मामले में BYTE या CHAR लॉक को बदलना संभव होगा, इसलिए इसे कभी-कभी IDE अनुकूलन में सेट किया जा सकता है। एक घंटे के लिए आप आसानी से खो सकते हैं, क्योंकि ORACLE प्रकार, एक नियम के रूप में, varchar2 प्रकार का उपयोग करता है (और यहाँ यह एक घंटे के लिए सही है, उदाहरण के लिए, UTF-8 कोडिंग के साथ), मैं स्पष्ट रूप से CHAR लिखूंगा (क्योंकि यह आसान है पंक्ति को अक्षरों में नाम देने के लिए)।

लेकिन समय के साथ-साथ तालिकाओं में पहले से ही є याक-नेबड डेटा, फिर कमांड के सफल टाइपिंग के लिए यह आवश्यक है कि तालिका की सभी पंक्तियों में आईडी और नाम फ़ील्ड obov'yazkovo zapovneni हों। हम इसे उदाहरण पर प्रदर्शित करेंगे, इसे फ़ील्ड आईडी, स्थिति और विभाग में डेटा तालिका में डालें, जिसे निम्न स्क्रिप्ट द्वारा उत्पन्न किया जा सकता है:

INSERT कर्मचारी (आईडी, स्थिति, विभाग) मान (1000,N"निदेशक",N"प्रशासन"), (1001,N"प्रोग्रामर",N"IT"), (1002,N"लेखाकार",N"लेखा") ), (1003, एन "सीनियर प्रोग्रामर", एन "आईटी")
कई बार, INSERT कमांड क्षमा भी देखता है, क्योंकि सम्मिलित करते समय, उन्होंने नाम फ़ील्ड के मान को भाषा फ़ील्ड में असाइन नहीं किया।
यदि हमारे पास पहले से ही तालिका में डेटा है, तो ALTER TABLE Employees ALTER COLUMN ID int NOT NULL कमांड सफल रहा, और ALTER TABLE Employees ALTER COLUMN Name int NOT NULL कमांड ने क्षमा संदेश देखा कि नाम फ़ील्ड NULL (असाइन नहीं किया गया) है कीमत।

नाम फ़ील्ड के लिए मान जोड़ें और डेटा प्रविष्टि को नवीनीकृत करें:


साथ ही, जब भी कोई नई तालिका बनाई जाती है, तो नॉट न्यूल विकल्प पीटा जा सकता है। क्रिएट टेबल कमांड के संदर्भ में।

पीठ पर, हम कमांड की सहायता के लिए टेबल देख सकते हैं:

ड्रॉप टेबल कर्मचारी
अब आइए कॉलम आईडी और नाम भरने के लिए अनिवार्य तालिका बनाएं:

क्रिएट टेबल कर्मचारी (आईडी इंट नॉट न्यूल, नाम नवरचर (30) नॉट न्यूल, जन्मदिन की तारीख, ईमेल नवरचार (30), स्थिति नवरचार (30), विभाग नवरचार (30))
नाम के बाद NULL लिखना भी संभव है, जिसका अर्थ है कि नए NULL में मान (निर्दिष्ट नहीं) मान्य होंगे, लेकिन यह कार्य obov'yazkovo नहीं है, इसलिए विशेषता को समझने के लिए दिया गया है।

जैसा कि zapovnennia के लिए आवश्यक स्टोवपेट्स neobov'yazkovym बनाना आवश्यक है, तो निम्न कमांड सिंटैक्स विजयी होता है:

वैकल्पिक तालिका कर्मचारी वैकल्पिक कॉलम नाम nvarchar(30) NULL
अबो सरल है:

वैकल्पिक तालिका कर्मचारी वैकल्पिक स्तंभ नाम nvarchar(30)
इस कमांड के साथ, हम फील्ड के प्रकार को लोअर सम टाइप में भी बदल सकते हैं, या दूसरे को बदल सकते हैं। उदाहरण के लिए, नाम फ़ील्ड को 50 वर्णों तक विस्तृत करें:

वैकल्पिक तालिका कर्मचारी वैकल्पिक स्तंभ नाम nvarchar(50)

प्राथमिक कुंजी

जब तालिकाओं को संयुक्त किया जाता है, तो यह महत्वपूर्ण है कि एक छोटा सा अनोखा स्टोवपेट हो, या स्टोवप्ट्सिव का एक संयोजन हो, जो त्वचा की पंक्ति के लिए अद्वितीय हो - दिए गए अद्वितीय मूल्यों के लिए, आप स्पष्ट रूप से रिकॉर्ड की पहचान कर सकते हैं। इस मान को तालिका की प्राथमिक कुंजी कहा जाता है। हमारी कर्मचारी तालिका के लिए, ऐसे अद्वितीय मानों को एक आईडी असाइन किया जा सकता है (जिसका उपयोग "कर्मचारी के अस्थायी कर्मियों की संख्या" के रूप में किया जा सकता है - हमारे मामले में, मान त्वचा विशेषज्ञ के लिए अद्वितीय है और इसे दोहराया नहीं जा सकता है)।

आप अतिरिक्त आदेश का उपयोग करके पहले से मौजूद तालिका की पहली कुंजी बना सकते हैं:

वैकल्पिक तालिका कर्मचारी प्रतिबंध जोड़ें PK_कर्मचारी प्राथमिक कुंजी (आईडी)
De "PK_Employees" tse ism'ya obmezhennya, scho vydpovidaє पहली कुंजी के लिए। प्राथमिक कुंजी का नाम ध्वनि, उपसर्ग "पीके_" किसी तालिका नाम के बाद चुना जाता है।

चूंकि पहली कुंजी डेकिलकोह क्षेत्रों से बनती है, तो इन क्षेत्रों को मेहराब में फिर से प्रस्तुत करने की आवश्यकता होती है जिनके माध्यम से:

वैकल्पिक तालिका तालिका_नाम जोड़ें प्रतिबंध विनिमय_नाम प्राथमिक कुंजी (फ़ील्ड 1, फ़ील्ड 2,…)
वार्टो निर्दिष्ट करता है कि एमएस एसक्यूएल में फ़ील्ड्स को प्राथमिक कुंजी से पहले शामिल किया जाना चाहिए, विशेषता नॉट न्यूल के कारण।

इसके अलावा, तालिका के निर्माण के समय पहली कुंजी बिना किसी देरी के सौंपी जा सकती है। क्रिएट टेबल कमांड के संदर्भ में। आइए तालिका देखें:

ड्रॉप टेबल कर्मचारी
और फिर її, vikoristovuyuuchi आक्रामक वाक्य रचना बनाते हैं:

क्रिएट टेबल एम्प्लॉइज (आईडी इंट नॉट न्यूल, नेम नवरचर (30) नॉट न्यूल, वर्चुअल आवर, ईमेल नवारचर (30), पोजीशन नवारचर (30), डिपार्टमेंट नवरचर (30), कन्स्ट्रेंट पीके_कर्मचारी सभी क्षेत्रों की प्राथमिक कुंजी, एक कर्मचारी के रूप में)
डेटा तालिका में डेटा के निर्माण के बाद:

INSERT कर्मचारी (आईडी, स्थिति, विभाग, नाम) मान (1000,N"निदेशक",N"प्रशासन",N"इवानोव I.I."), (1001,N"प्रोग्रामर",N"IT",N" पेट्रोव पी.पी." ), (1002,N"Accountant",N"Accounting",N"Sidoriv S.S."), (1003,N"Senior Programmer",N"IT",N"Andreev A. A.")
चूँकि तालिका की पहली कुंजी एक स्तंभ के मान से कम है, आप निम्न सिंटैक्स को घुमा सकते हैं:

क्रिएट टेबल एम्प्लॉइज (ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, - फ़ील्ड नाम nvarchar(30) NOT NULL, जन्मदिन की तारीख, ईमेल nvarchar(30), स्थिति nvarchar(30), विभाग n की विशेषता के रूप में निर्दिष्ट किया जा सकता है
आप कंपनी का वास्तविक नाम सेट कर सकते हैं और नहीं भी, जिस स्थिति में आपको एक सिस्टम नाम दिया जाएगा (उदाहरण के लिए, PK__Employee__3214EC278DA42077):

क्रिएट टेबल कर्मचारी (आईडी इंट नॉट न्यूल, नाम नवरचार (30) नॉट न्यूल, जन्मदिन की तारीख, ईमेल नवरचर (30), स्थिति नवरचार (30), विभाग नवरचार (30), प्राथमिक कुंजी (आईडी))
अबो:

क्रिएट टेबल एम्प्लॉइज (ID int not NULL PRIMARY KEY, नाम nvarchar(30) NOT NULL, जन्मदिन की तारीख, ईमेल nvarchar(30), स्थिति nvarchar(30), विभाग nvarchar(30))
अली, मैं post_ynih तालिकाओं के लिए द्वि की अनुशंसा करता हूं zavzhdya स्पष्ट रूप से im'ya obmezhennya, tk सेट करें। उन्हें स्पष्ट रूप से स्थापित करने और समझने के लिए, उनके साथ जोड़तोड़ करना आसान होगा, उदाहरण के लिए, आप निम्नलिखित पर काम कर सकते हैं:

ALTER TABLE कर्मचारी DROP CONSTRAINT PK_Employees
लेकिन इस तरह का एक छोटा सिंटैक्स, सीमा को नाम दिए बिना, डेटाबेस के टाइम टेबल के निर्माण के घंटे को मैन्युअल रूप से zastosovuvat pіd (टाइम टेबल का समय # chi ## पर आधारित है), जैसे ही मैच होगा देखा गया।

शायद

एक बार हमने अग्रिम आदेशों को देखा:
  • तालिका बनाएं table_name (उस प्रकार के क्षेत्रों को फिर से भरना, परिसीमन) - स्ट्रीमिंग डेटाबेस में एक नई तालिका बनने तक सेवा करें;
  • ड्रॉप तालिका table_name - स्ट्रीमिंग डेटाबेस से दूरस्थ तालिका के रूप में सेवा करें;
  • तालिका में परिवर्तनतालिका नाम वैकल्पिक स्तंभ im'ya_stovptsya ... - स्टोव के प्रकार को अपडेट करने या इसकी सेटिंग बदलने के लिए सेवा करें (उदाहरण के लिए, विशेषता को NULL या NOT NULL सेट करने के लिए);
  • तालिका में परिवर्तनतालिका नाम प्रतिबंध जोड़ें im'ya_obezhennya प्राथमिक कुंजी(फ़ील्ड1, फ़ील्ड2,...) - पहले से मौजूद तालिका में प्राथमिक कुंजी जोड़ना;
  • तालिका में परिवर्तनतालिका नाम ड्रॉप प्रतिबंध exchange_name - टेबल से रिमोट एक्सचेंज।

टिमचास टेबल के बारे में ट्रोच

एमएसडीएन से विरिज़का।एमएस एसक्यूएल सर्वर में दो प्रकार की समय सारणी होती है: स्थानीय (#) और वैश्विक (##)। स्थानीय समय सारिणी उनके रचनाकारों के लिए कम दिखाई देती है जब तक कि SQL सर्वर के उदाहरण के साथ सत्र पूरा नहीं हो जाता, ठीक अतीत में निर्माण की बदबू की तरह। SQL सर्वर के उदाहरण में घड़ी चालू होने पर स्थानीय घड़ी तालिकाएँ स्वचालित रूप से दिखाई देती हैं। ग्लोबल क्लॉक टेबल को सभी क्लॉक द्वारा देखा जा सकता है, चाहे वे इन टेबल के निर्माण के बाद बनाए गए हों और दिखाई दे रहे हों, यदि सभी क्लॉक, जैसा कि वे टेबल पर दिखाई देते हैं, SQL सर्वर के इंस्टेंस में शामिल हैं।

टाइमिंग टेबल tempdb सिस्टम डेटाबेस में बनाए जाते हैं, यानी। मुख्य डेटाबेस द्वारा देखे बिना उन्हें बनाना, एक अन्य समय सारणी में, वे प्राथमिक तालिकाओं के समान हैं, उन्हें DROP TABLE कमांड की सहायता से देखा जा सकता है। अक्सर, स्थानीय (#) क्लॉक टेबल विजयी होते हैं।

टाइम टेबल बनाने के लिए आप क्रिएट टेबल कमांड का उपयोग कर सकते हैं:

तालिका बनाएं #Temp (आईडी int, नाम nvarchar (30))
चूँकि MS SQL में टाइम टेबल प्राथमिक तालिका के समान है, इसलिए इसे DROP TABLE कमांड द्वारा भी देखा जा सकता है:

ड्रॉप टेबल #Temp

तो टाइम टेबल ही (मूल तालिका की तरह) बनाया जा सकता है और तुरंत डेटा के साथ लोड किया जा सकता है, विजयी सिंटैक्स द्वारा घुमाया जाता है SELECT ... INTO:

आईडी का चयन करें, कर्मचारियों से #Temp में नाम

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

डेटाबेस का सामान्यीकरण - सबटेबल्स (दस्तावेजों) में विभाजित करना और लिंक असाइन करना

हमारी स्ट्रीमिंग टेबल कर्मचारी उन लोगों के लिए पर्याप्त नहीं हो सकते हैं जो कोरिस्तुवाच की स्थिति और विभाग के क्षेत्रों में किसी भी पाठ को दर्ज कर सकते हैं, जिसे मैं वर्ष के पहले भाग में क्षमा के साथ धमकी दूंगा, इसलिए एक spіvrobіtnik की शराब के रूप में दर्ज किया जा सकता है а vіddіl सिर्फ "ІТ", और दूसरे spіvrobіtnik के लिए, उदाहरण के लिए, "IT-viddil" दर्ज करें, तीसरे "IT" पर। परिणाम में, यह अनुचित था कि माँ उवाज़ी कोरिस्टुवाच, टोबटो पर थी। एक ही vіddіlu के चिकित्सकों द्वारा दिए गए spіvrobіtniki ने क्या किया, क्या koristuvach ने खुद को वर्णित किया और 3 अलग-अलग vіddіlu का वर्णन किया? और फिर, हमारी राय में, हम इस तरह के नाम, डे के लिए डेटा को सही ढंग से समूहित नहीं कर सकते हैं, यह संभव है, त्वचा रोग के विश्लेषण में स्पिवोबिटनिकों की संख्या दिखाना आवश्यक है।

एक और nedolіk polygaє y obsyazі zberіgannya tsієї Innformatsії її її dubluvannyam, tobto। एक त्वचा प्रतीक के लिए, व्यक्ति के नाम का नाम देना आवश्यक है, जिसका उपयोग डेटाबेस में व्यक्ति के नाम के लिए त्वचा के प्रतीक के चयन के लिए किया जाता है।

तीसरा nedolіk इन क्षेत्रों को अद्यतन करने की तह है, जैसे कि किसी पौधे का नाम बदलना, उदाहरण के लिए, "प्रोग्रामिस्ट" का नाम "यंग प्रोग्रामर" में बदलना आवश्यक है। इस बिंदु पर, हम तालिका की त्वचा पंक्ति में परिवर्तन करने में सक्षम होंगे, उसी पोसाडा डोरोव्नु «प्रोग्रामिस्ट» में।

इन कमियों और zastosovuєtsya से बचने के लिए तथाकथित डेटा बेस का सामान्यीकरण - उन्हें सबटेबल्स, टेबल dovidniki में विभाजित करना। यह गैर-ट्रिपल सिद्धांतों और ट्विस्ट में झूठ बोलने के लिए नहीं है, सामान्य रूपों की क्या कल्पना करें, यह सामान्यीकरण के सार को समझने के लिए पर्याप्त है।

चलिए 2 टेबल "प्लांट" और "विडिली" बनाते हैं, पहले वाले को पोजिशन कहा जाता है, और दूसरे को डिपार्टमेंट कहा जाता है:

टेबल पोजीशन बनाएं (आईडी इंट आइडेंटिटी (1,1) न्यूल कंस्ट्रेंट पीके_पोजिशन प्राइमरी की, नेम एनवरचर (30) नॉट न्यूल) क्रिएट टेबल डिपार्टमेंट्स (आईडी इंट आइडेंटिटी (1,1) नॉट न्यूल कंस्ट्रेंट पीके_डिपार्टमेंट्स प्राइमरी) नॉट न्यूल)
सम्मानपूर्वक, हमने यहां एक नया पहचान विकल्प पेश किया है, इसलिए उन लोगों के बारे में बात करने के लिए जो आईडी कॉलम में दिए गए हैं, स्वचालित रूप से क्रमांकित हैं, 1 से शुरू होकर, 1 से। नए रिकॉर्ड जोड़ते समय, उन्हें क्रमिक रूप से 1, 2, 3, और इसी तरह मान दिए जाते हैं। ऐसे क्षेत्रों को ऑटोइनक्रिमेंटल कहा जाता है। एक तालिका में एक से अधिक IDENTITY फ़ील्ड निर्दिष्ट हो सकते हैं, और, एक नियम के रूप में, भाषा होना आवश्यक नहीं है, ऐसा फ़ील्ड इस तालिका के लिए प्राथमिक कुंजी है।

टिप्पणी
अलग-अलग डीबीएमएस में निजी व्यक्ति से सिंचाई का क्रियान्वयन अपने लिए काम कर सकता है। MySQL में, उदाहरण के लिए, ऐसा फ़ील्ड अतिरिक्त AUTO_INCREMENT विकल्प को सौंपा गया है। ओरेकल और फायरबर्ड में, पहले इस कार्यक्षमता को विभिन्न अनुक्रमों (अनुक्रम) की सहायता के लिए अनुकरण किया जा सकता था। जहाँ तक मुझे पता है, Oracle ने एक ही बार में GENERATED AS IDENTITY विकल्प जोड़ा।

कर्मचारियों की तालिका की स्थिति और विभाग क्षेत्रों में स्ट्रीमिंग डेटा रिकॉर्ड के आधार पर, स्वचालित रूप से तालिकाओं को याद रखें:

स्थिति तालिका का नाम फ़ील्ड तालिका के स्थिति फ़ील्ड से अद्वितीय मानों से भरा हुआ है।
विभागों की तालिका के लिए भी यही संभव है:

विभाग डालें (नाम) कर्मचारियों से अलग विभाग का चयन करें जहां विभाग शून्य नहीं है
जैसा कि हम पदों और विभागों की तालिकाओं को देखते हैं, हम आईडी फ़ील्ड में मान टाइप करके भी मानों को क्रमांकित कर सकते हैं:

चुनें * पदों से

* विभागों से चयन करें

तालिकाओं का डेटा अब निपटान के प्रमुख और viddіlіv के लिए dovіdnikov की भूमिका निभाता है। अब हम लैंडिंग के पहचानकर्ता और vіddіlіv के लिए पूछ रहे हैं। हम इन पहचानकर्ताओं को एकत्रित करने के लिए कर्मचारी तालिका में नए फ़ील्ड बना रहे हैं:

प्लांट आईडी के लिए एक फ़ील्ड जोड़ें ALTER TABLE कर्मचारी ADD पोजिशनआईडी इंट - प्लांट की आईडी के लिए एक फ़ील्ड जोड़ें ALTER TABLE कर्मचारी ADD DepartmentID int
व्यवहार्य जल का प्रकार स्वयं दोनों का दोष है, जैसे कि डोविदनिकों में, इस त्से इंट में।

एक कमांड के साथ तालिका में तालिका में पानी की मात्रा जोड़ना भी संभव है, जिसके माध्यम से खेतों को फिर से जीवित किया जा सके:

ALTER TABLE कर्मचारी ADD स्थितिID int, DepartmentID int
अब हम इन क्षेत्रों के लिए मूल्य (संभावित विनिमय - विदेशी कुंजी) लिखेंगे, ताकि दिए गए क्षेत्रों में लिखना संभव न हो, मूल्य, आईडी का दैनिक औसत मूल्य, जो खेतों में है।

वैकल्पिक टेबल कर्मचारी प्रतिबंध जोड़ें FK_कर्मचारी_स्थितिआईडी विदेशी कुंजी (स्थितिआईडी) संदर्भ स्थिति (आईडी)
मैं वही zrobimo दूसरे क्षेत्र के लिए:

वैकल्पिक तालिका कर्मचारी प्रतिबंध जोड़ें FK_कर्मचारी_विभागआईडी विदेशी कुंजी(विभागआईडी) संदर्भ विभाग(आईडी)
अब निर्दिष्ट तिथि से इस क्षेत्र के लिए एक अतिरिक्त आईडी मान दर्ज करना संभव है। जाहिरा तौर पर, यदि आप एक नया रिकॉर्ड जीतना चाहते हैं, या रोपण करना चाहते हैं, तो यह हमारी ज़िम्मेदारी होगी कि अंतिम तिथि में एक नया रिकॉर्ड जोड़ें। क्योंकि संयंत्र है कि मातम अब एक ही उदाहरण में dovіdniki में सहेजा जाता है, फिर नाम बदलने के लिए, यह dovidnik में і tіlki को बदलने के लिए पर्याप्त है।

Іm'ya possilnogo obezhennya, कॉल, є storable, यह उपसर्ग "FK_" से मुड़ा हुआ है, फिर साइन इन करने के संकेत के बाद में टेबल पर जाएं, याक टेबल-डोडनिक के पहचानकर्ता के लिए पूछें .

पहचानकर्ता (आईडी) का उपयोग आंतरिक मूल्यों के लिए किया जाना चाहिए, ताकि कॉल के लिए केवल शब्द चुने जाएं, और जैसा कि मूल्य लिया जाता है, ज्यादातर मामलों में यह बिल्कुल गलत है, संख्याओं के क्रम में तारों से छुटकारा पाने के लिए जरूरी नहीं है, मुझे टेबल के साथ काम करने के दौरान दोष देना है, उदाहरण के लिए, डॉक्टर से रिकॉर्ड छोड़ने के बाद।

ALTER TABLE TBL ADD CONSTRAINT IM_ID FOREIGN KEY(field1, eld2,…) संदर्भ table_address(field1, eld2,…)
इस मामले में, "टेबल_डोमेन" तालिका में, प्रस्तुतियों की पहली कुंजी डिकल फ़ील्ड (फ़ील्ड 1, फ़ील्ड 2, ...) का संयोजन है।

ठीक है, अब आइए डॉक्स से आईडी मानों के साथ पोजीशनआईडी और डिपार्टमेंटआईडी फ़ील्ड को अपडेट करें। उस डीएमएल को UPDATE कमांड के साथ अपलोड करें:

अद्यतन ई सेट स्थिति आईडी = (चयनित आईडी से स्थिति जहां नाम = ई। पद), विभाग आईडी = (विभागों से चयन आईडी जहां नाम = ई। विभाग) कर्मचारियों से ई
हम आश्चर्यचकित हैं कि क्या हुआ, व्याकोनवशी ने पूछा:

कर्मचारियों से * चुनें

बस इतना ही, अलग-अलग पॉज़ैड और अन्य पहचानकर्ताओं से भरे हुए पोजिशनआईडी और डिपार्टमेंटआईडी फ़ील्ड अब कर्मचारी तालिका में स्थिति और विभाग फ़ील्ड में उपलब्ध नहीं हैं, आप इन फ़ील्ड को देख सकते हैं:

वैकल्पिक टेबल कर्मचारी ड्रॉप कॉलम स्थिति, विभाग
अब हमारी टेबल इस तरह दिखती है:

कर्मचारियों से * चुनें

पहचान नाम जन्मदिन ईमेल स्थिति आईडी विभाग आईडी
1000 इवानोव आई.आई. व्यर्थ व्यर्थ 2 1
1001 पेट्रोव पी.पी. व्यर्थ व्यर्थ 3 3
1002 सिदोरोव एस.एस. व्यर्थ व्यर्थ 1 2
1003 एंड्रीव ए.ए. व्यर्थ व्यर्थ 4 3

टोबटो। परिणामस्वरूप, हमने दुनिया भर की जानकारी एकत्र की है। अब, संख्याओं के बाद, उस चर को रखें, आप स्पष्ट रूप से उन्हें नाम दे सकते हैं, तालिका-डोडनिक में vicorist मान:

ई.आईडी, ई.नाम, पी.नाम स्थिति का नाम, डी.नाम विभाग का नाम कर्मचारियों से चुनें ई बाएं विभागों में शामिल हों

ऑब्जेक्ट इंस्पेक्टर में, हम इस तालिका के लिए बनाई गई सभी वस्तुओं को शामिल कर सकते हैं। आप इन वस्तुओं के साथ विभिन्न जोड़तोड़ कर सकते हैं - उदाहरण के लिए, वस्तुओं का नाम बदलें और हटाएं।

यह इंगित करना भी आवश्यक है कि तालिका को अपने लिए, टोटो से पूछा जा सकता है। बल द्वारा पुनरावर्ती रूप से किया जा सकता है। बट के लिए, हम अपनी तालिका में स्पिवोबिटनिक के साथ एक और फील्ड मैनेजरआईडी जोड़ते हैं, क्योंकि यह स्पिवोबिटनिक का संकेत है, जिसके लिए यह स्पिवोबिटनिक ऑर्डर किया गया है। हम एक क्षेत्र बनाते हैं:

ALTER TABLE कर्मचारी ADD ManagerID int
इस फ़ील्ड का NULL का मान्य मान है, फ़ील्ड खाली होगी, उदाहरण के लिए, स्पेसर के ऊपर कोई अधिसंख्य नहीं हैं।

अब कर्मचारियों की मेज पर एक विदेशी कुंजी बनाते हैं:

वैकल्पिक तालिका कर्मचारी प्रतिबंध जोड़ें FK_कर्मचारी_प्रबंधक आईडी विदेशी कुंजी (प्रबंधक आईडी) संदर्भ कर्मचारी (आईडी)
आइए अब एक डायग्राम बनाएं और देखें कि हम अपने टेबल के बीच के कनेक्शन को कैसे देखते हैं:

मेरी गलती के परिणामस्वरूप, चित्र आ जाएगा (कर्मचारियों की तालिका पदों और विभागों की तालिकाओं से जुड़ी हुई है, और स्वयं भी काम करती है):

हम यह कहना चाहते हैं कि आपके द्वारा भेजी जाने वाली कुंजियों में DELETE CASCADE और ON DATE CASCADE पर अतिरिक्त विकल्प शामिल हो सकते हैं, जैसे कि उनके बारे में बात करना, जब आप किसी रिकॉर्ड को देखते हैं या अपडेट करते हैं, तो उसे एड-ऑन टेबल पर कैसे भेजना है। यदि ये विकल्प निर्दिष्ट नहीं हैं, तो हम उस रिकॉर्ड की दिनांक तालिका में उस आईडी को नहीं बदल सकते हैं, जिसे एक अन्य तालिका से भेजा गया है, इसलिए हम इस तरह के रिकॉर्ड को दिनांक से ही नहीं देख सकते, जब तक कि हम सभी पंक्तियों को नहीं देख सकते जो पूरे रिकॉर्ड को संदर्भित करता है। खैर, इन पंक्तियों में और अधिक अर्थ जोड़ने के लिए यह नया है।

उदाहरण के लिए, FK_Employees_DepartmentID के लिए असाइन किए गए ON DELETE CASCADE विकल्पों से तालिका को फिर से बनाते हैं:

ड्रॉप टेबल कर्मचारी टेबल कर्मचारी बनाते हैं (आईडी इंट न्यूल नहीं है, नाम nvarchar (30), जन्मदिन की तारीख, ईमेल नवरचर (30), पोजिशन आईडी इंट, डिपार्टमेंट आईडी इंट, मैनेजर आईडी इंट, कॉन्स्ट्रेन पीके_कर्मचारी प्राथमिक) संदर्भ विभाग (आईडी) डिलीट कैस्केड पर, बाधा FK_Employees_PositionID विदेशी कुंजी(PositionID) संदर्भ स्थिति(ID), CONSTRAINT FK_Employees_ManagerID विदेशी कुंजी (ManagerID) )VALUES (1000,N"Ivanov II.","19550219",2,1,NULL), (1001,N"Petrov P.P.", "19831203", 3,3,1003), (1002 ,N"Sidorov S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417",4,3,1000)
हमने देखा कि यह विभागों की तालिका से आईडी 3 के साथ किया गया था:

विभागों को हटाएं जहां आईडी = 3
कर्मचारी तालिका में डेटा को देखते हुए:

कर्मचारियों से * चुनें

पहचान नाम जन्मदिन ईमेल स्थिति आईडी विभाग आईडी प्रबंधक आईडी
1000 इवानोव आई.आई. 1955-02-19 व्यर्थ 2 1 व्यर्थ
1002 सिदोरोव एस.एस. 1976-06-07 व्यर्थ 1 2 1000

बाचिमो की तरह, कर्मचारियों की तीसरी तालिका दी गई, ऐसा ही हुआ।

ON UPDATE CASCADE विकल्प उसी तरह व्यवहार करता है, लेकिन केवल तब जब आईडी का मान अपडेट किया जाता है। उदाहरण के लिए, यदि हम posad चेकलिस्ट में प्लांट की आईडी बदलते हैं, तो जिस स्थिति में कर्मचारी टेबल की डिपार्टमेंट आईडी को नए आईडी मान के साथ अपडेट किया जाएगा, जैसा कि हम चेकलिस्ट में सेट करते हैं। अले, इस विपदका त्से में नहीं देखने का प्रदर्शन, क्योंकि विभाग तालिका में आईडी कॉलम में पहचान विकल्प होना चाहिए, ताकि हमें आने वाले अनुरोध पर हमला करने की अनुमति न दी जा सके (प्रविष्टि 3 से 30 की आईडी बदलें):

अद्यतन विभाग SET ID = 30 जहाँ ID = 3
Golovne zrozumit tsikh 2 विकल्पों का सार DELETE CASCADE और ON DATE CASCADE पर। मैं zastosovuyu tsі भी शायद ही कभी विरोध करता हूं और मैं अच्छी तरह से सोचने की सलाह देता हूं कि कैसे एक व्यवहार्य ओबेझेन्या में जाना है, tk। रिपोर्ट की तालिका से एक अपरिचित रिकॉर्ड के साथ, यह बड़ी समस्याएँ पैदा कर सकता है और लैंट्ज़ुगियन प्रतिक्रिया पैदा कर सकता है।

नोट 3:

पहचान मूल्य जोड़ने/बदलने की अनुमति है SET IDENTITY_INSERT विभागों पर INSERT विभाग (ID,Name) VALUES(3,N"IT") - पहचान मूल्य SET को जोड़ने/बदलने से रोकें
TRUNCATE TABLE कमांड की मदद से कर्मचारी टेबल को फिर से साफ करें:

ट्रंकेट टेबल कर्मचारी
मैं इसे इस डेटा में फिर से दोहराता हूं, फ्रंट INSERT कमांड पर दोबारा गौर करता हूं:

INSERT कर्मचारी (आईडी, नाम, जन्मदिन, स्थिति आईडी, विभाग आईडी, प्रबंधक आईडी) मान (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P." ,"19831203",3 ,3,1003), (1002,N"Sidoriv S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417" ,4,3,1000)

शायद

फिलहाल, कुछ और डीडीएल कमांड हमारी जानकारी में आए हैं:
  • फ़ील्ड में पहचान जोड़ना - तालिका के लिए फ़ील्ड को स्वचालित रूप से पॉप्युलेट (फ़ील्ड-नाम) करने की अनुमति देता है;
  • तालिका में परिवर्तनतालिका नाम जोड़ना change_fields_with_characteristics - आपको तालिका में नए फ़ील्ड जोड़ने की अनुमति देता है;
  • तालिका में परिवर्तनतालिका नाम ड्रॉप कॉलम list_of_fields - आपको तालिकाओं से फ़ील्ड देखने की अनुमति देता है;
  • तालिका में परिवर्तनतालिका नाम प्रतिबंध जोड़ें im'ya_obezhennya विदेशी कुंजी(खेत) प्रतिक्रिया दें संदर्भ doc_table(fields) – आपको एक टेबल और एक डॉक्टर टेबल के बीच एक लिंक असाइन करने की अनुमति देता है।

अन्य एक्सचेंज - यूनीक, डिफॉल्ट, चेक

UNIQUE वाटरिंग की मदद से, आप कह सकते हैं कि किसी दिए गए क्षेत्र में या वाटरिंग के सेट में स्किन लाइन का क्या मूल्य अद्वितीय हो सकता है। कर्मचारी तालिका के मामले में, आप ईमेल फ़ील्ड पर एक सीमा भी लगा सकते हैं। केवल अग्रिम रूप से ईमेल मान याद रखें, जैसे कि उन्हें अभी तक असाइन नहीं किया गया हो:

अद्यतन कर्मचारी सेट ईमेल = " [ईमेल संरक्षित]"जहां आईडी = 1000 अद्यतन कर्मचारी सेट ईमेल =" [ईमेल संरक्षित]"जहां आईडी = 1001 अद्यतन कर्मचारी सेट ईमेल =" [ईमेल संरक्षित]"जहां आईडी = 1002 अद्यतन कर्मचारी सेट ईमेल =" [ईमेल संरक्षित]जहां आईडी = 1003
और अब आप obmezhennia-uniqueness के क्षेत्र में रख सकते हैं:

वैकल्पिक टेबल कर्मचारी प्रतिबंध जोड़ें UQ_कर्मचारी_ईमेल UNIQUE(ईमेल)
अब संवाददाता एक ही ई-मेल में कई स्पिवोबिटनिकों के साथ प्रवेश नहीं कर सकता है।

विशिष्टता के आदान-प्रदान को ऐसा कहा जाता है - सबसे पहले, उपसर्ग "यूक्यू_", ने तालिका का नाम दिया और क्षेत्र के नाम के उपखंड के संकेत के बाद, जैसे कि दिया गया विनिमय आरोपित है।

ऐसा लगता है कि टेबल में पंक्तियों की पंक्तियों में पानी का संयोजन अद्वितीय है, लेकिन यह किसके माध्यम से भुनाया जा सकता है:

परिवर्तन तालिका तालिका_नाम प्रतिबंध जोड़ें विनिमय_नाम अद्वितीय (फ़ील्ड 1, फ़ील्ड 2, ...)
DEFAULT बॉक्‍स फ़ील्‍ड में जोड़ने में अतिरिक्‍त सहायता के लिए, हम लॉक के लिए वैल्‍यू सेट कर सकते हैं, ताकि इसे ड्रॉपडाउन में प्रस्‍तुत किया जा सके, ताकि नया रिकॉर्ड डालते समय फ़ील्‍ड को फ़ील्‍ड की सूची में फिर से सूचीबद्ध न किया जाए इंसर्ट कमांड। तालिकाओं को मोड़ते समय आप बिना किसी मध्यस्थ के उसी एक्सचेंज को स्थापित कर सकते हैं।

कर्मचारी तालिका में एक नया फ़ील्ड "प्राप्त करने की तिथि" जोड़ें और इसे HireDate नाम दें और मान लें कि इस फ़ील्ड को लॉक करने का मान वर्तमान दिनांक होगा:

वैकल्पिक तालिका कर्मचारी किराया दिनांक जोड़ें, डिफ़ॉल्ट SYSDATETIME नहीं है ()
यदि HireDate पहले से मौजूद है, तो आप निम्न सिंटैक्स को ट्वीक कर सकते हैं:

वैकल्पिक तालिका कर्मचारी किराया दिनांक के लिए डिफ़ॉल्ट SYSDATETIME() जोड़ते हैं
यहाँ मैंने ओबेझेन्या का नाम दर्ज नहीं किया, क्योंकि vipadku DEFAULT में, मेरे पास एक विचार था कि यह इतना महत्वपूर्ण नहीं है। लेकिन अगर आप दयालुता से काम करते हैं, तो, मुझे लगता है, आपको लाइन में लगने और सामान्य नाम पूछने की ज़रूरत नहीं है। ऐसे करें फाइट:

ALTER TABLE कर्मचारी ADD CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME() HireDate के लिए
यदि पहले इसका कोई संकेत नहीं था, तो जब आप इसे स्किन रिकॉर्ड में जोड़ते हैं, तो HireDate फ़ील्ड में अधिक सटीक तिथि डाली जाएगी।

नई प्रविष्टि जोड़ते समय, वर्तमान तिथि भी स्वचालित रूप से सम्मिलित हो जाएगी, लेकिन हम इसे स्पष्ट रूप से सेट नहीं कर सकते। Stovptsіv की सूची में नहीं दिखाया गया है। यह अनुवाद में HireDate फ़ील्ड को निर्दिष्ट किए बिना, जोड़े गए मान को एप्लिकेशन पर दिखाया गया है:

INSERT कर्मचारी (आईडी, नाम, ईमेल) मान (1004,N"Sergeev S.S."," [ईमेल संरक्षित]")
देखते है क्या हुआ:

कर्मचारियों से * चुनें

पहचान नाम जन्मदिन ईमेल स्थिति आईडी विभाग आईडी प्रबंधक आईडी चुनने की तारीख
1000 इवानोव आई.आई. 1955-02-19 [ईमेल संरक्षित] 2 1 व्यर्थ 2015-04-08
1001 पेट्रोव पी.पी. 1983-12-03 [ईमेल संरक्षित] 3 4 1003 2015-04-08
1002 सिदोरोव एस.एस. 1976-06-07 [ईमेल संरक्षित] 1 2 1000 2015-04-08
1003 एंड्रीव ए.ए. 1982-04-17 [ईमेल संरक्षित] 4 3 1000 2015-04-08
1004 सर्गेव एस.एस. व्यर्थ [ईमेल संरक्षित] व्यर्थ व्यर्थ व्यर्थ 2015-04-08

चेक रूपांतरण उस मामले में चेक किया गया है, यदि फ़ील्ड में डालने के लिए मान को बदलना आवश्यक है। उदाहरण के लिए, हम कार्मिक संख्या फ़ील्ड पर एक एक्सचेंज डालते हैं, जैसे mi є isdidentifier svrobіtnik (ID)। इस तरह के आदान-प्रदान की मदद के लिए, मान लीजिए कि कर्मियों की संख्या और दोषी माताएँ 1000 से 1999 तक हैं:

ALTER TABLE कर्मचारी ADD CONSTRAINT CK_Employees_ID CHECK(ID 1000 और 1999 के बीच)
एक्सचेंज को अपने आप में कहा जाता है, सबसे पहले, एक उपसर्ग "CK_" है, फिर हम टेबल और फ़ील्ड का नाम रखेंगे, याक पर सीमा लगाई गई है।

पुन: सत्यापन के लिए एक अस्वीकार्य प्रविष्टि सम्मिलित करने का प्रयास करें, जो एक्सचेंज काम करता है (हम आवश्यक क्षमा ले सकते हैं):

इंसर्ट कर्मचारी (आईडी, ईमेल) मान (2000, " [ईमेल संरक्षित]")
और अब हम 1500 द्वारा डाले गए मान को बदल रहे हैं और रिकॉर्ड को सम्मिलित करने के लिए बदल रहे हैं:

इंसर्ट कर्मचारी (आईडी, ईमेल) मान (1500, " [ईमेल संरक्षित]")
आप नाम निर्दिष्ट किए बिना एक UNIQUE और CHECK एक्सचेंज भी बना सकते हैं:

ALTER TABLE कर्मचारी ADD UNIQUE (ईमेल) ALTER TABLE कर्मचारी ADD CHECK (ID 1000 और 1999 के बीच)
लेकिन यह अभी भी अच्छा अभ्यास है और इसे स्पष्ट दृश्य के सामने रखना बेहतर है, क्योंकि ताकि हम बाद में पता लगा सकें कि क्या अधिक महत्वपूर्ण होगा, वस्तु और चमत्कार दिखाना आवश्यक होगा, जिसके लिए हम उत्तर देंगे।

एक अच्छे नाम के साथ, इस नाम पर मध्यस्थ के बिना एक्सचेंज के बारे में बहुत सारी जानकारी पहचानी जा सकती है।

मैं, जाहिरा तौर पर, सभी एक्सचेंजों को एक ही बार में बनाया जा सकता है जब तालिकाओं को संयुक्त किया जाता है, लेकिन यह अभी भी संभव नहीं है। आइए तालिका देखें:

ड्रॉप टेबल कर्मचारी
І एक कमांड क्रिएट टेबल के साथ बनाए गए एक्सचेंजों के साथ us z usіma का पुनर्निर्माण करना संभव है:

क्रिएट टेबल कर्मचारी (आईडी इंट न्यूल, नाम नवरचर (30), जन्मदिन की तारीख, ईमेल नवरचर (30), पोजिशनआईडी इंट, डिपार्टमेंट आईडी इंट, हायरडेट डेट नॉट डिफॉल्ट SYSDATETIME (), - डिफॉल्ट आई जेड (आईडी) के लिए, CONSTRAINT FK_Employees_DepartmentID विदेशी कुंजी (विभाग आईडी) संदर्भ विभाग (आईडी), बाधा एफके_कर्मचारी_स्थिति आईडी विदेशी कुंजी (स्थिति आईडी) संदर्भ स्थिति (आईडी), बाधा यूक्यू_कर्मचारी_ईमेल अद्वितीय (ईमेल), बाधा सीके_कर्मचारी_आईडी जांच (1000 और 1 999 के बीच आईडी))

INSERT कर्मचारी (आईडी, नाम, जन्मदिन, ईमेल, स्थिति आईडी, विभाग आईडी) मान (1000,N"Ivanov I.I.","19550219"," [ईमेल संरक्षित]",2,1), (1001,एन"पेट्रोव पी.पी.","19831203"," [ईमेल संरक्षित]",3,3), (1002,N"Sidorov S.S.","19760607"," [ईमेल संरक्षित]",1,2), (1003,एन"एंड्रीव ए.ए.","19820417",," [ईमेल संरक्षित]",4,3)

इंडेक्स के बारे में ट्रोच, जो तब बनते हैं जब PRIMARY KEY और UNIQUE की सीमाएं संयुक्त होती हैं

जैसा कि आप स्क्रीनशॉट पर देख सकते हैं, जब PRIMARY KEY और UNIQUE बॉर्डर संयुक्त किए गए थे, समान नाम (PK_Employees और UQ_Employees_Email) वाले इंडेक्स स्वचालित रूप से बनाए गए थे। लॉकिंग के लिए, प्राथमिक कुंजी के लिए इंडेक्स को क्लस्टर्ड के रूप में बनाया जाता है, और इंडेक्स को गैर-क्लस्टरेड के रूप में हल किया जाता है। वार्टो का कहना है कि क्लस्टर्ड इंडेक्स की समझ हमारे डीबीएमएस में नहीं है। तालिका में एक से अधिक संकुलित (CLUSTERED) अनुक्रमणिका हो सकती हैं। CLUSTERED - का मतलब है कि इस इंडेक्स द्वारा टेबल के रिकॉर्ड्स को सॉर्ट किया जाएगा, इसलिए आप कह सकते हैं कि इस इंडेक्स की सभी टेबल डेटा तक सीधी पहुंच हो सकती है। तालिका का प्रमुख सूचकांक। रफ, प्राइस इंडेक्स, टेबल पर बोल्टिंग कैसे कहें। क्लस्टर इंडेक्स - यह और भी कठिन काम है, जो पीने के अनुकूलन में मदद कर सकता है, अभी के लिए, बस इसे याद रखें। यदि हम यह कहना चाहते हैं कि संकुल विजेता सूचकांक प्राथमिक कुंजी में नहीं है, लेकिन एक अलग सूचकांक के लिए है, तो जब प्राथमिक कुंजी को दोषी के साथ जोड़ दिया जाता है, तो NONCLUSTERED विकल्प निर्दिष्ट करें:

वैकल्पिक तालिका तालिका_नाम प्रतिबंध जोड़ें विनिमय_नाम प्राथमिक कुंजी गैर-वर्गीकृत (फ़ील्ड 1, फ़ील्ड 2, ...)
उदाहरण के लिए, एक्सचेंज इंडेक्स PK_Employees नॉन-क्लस्टर्ड है, और एक्सचेंज इंडेक्स UQ_Employees_Email क्लस्टर्ड है। हमने अपने सामने निम्नलिखित ओबेझेन्या देखे हैं:

वैकल्पिक तालिका कर्मचारी ड्रॉप प्रतिबंध PK_कर्मचारी वैकल्पिक तालिका कर्मचारी ड्रॉप प्रतिबंध UQ_कर्मचारी_ईमेल
और अब हम उन्हें CLUSTERED और NONCLUSTERED विकल्पों के साथ बनाते हैं:

वैकल्पिक तालिका कर्मचारी प्रतिबंध जोड़ें PK_कर्मचारी प्राथमिक कुंजी गैर-क्लस्टर (आईडी) वैकल्पिक तालिका कर्मचारी प्रतिबंध जोड़ें UQ_कर्मचारी_ईमेल अद्वितीय क्लस्टर (ईमेल)
अब, कर्मचारी तालिकाओं से चयन का चयन करने के बाद, हम देखते हैं कि रिकॉर्ड्स को संकुल सूचकांक UQ_Employees_Email के पीछे क्रमबद्ध किया गया था:

कर्मचारियों से * चुनें

पहचान नाम जन्मदिन ईमेल स्थिति आईडी विभाग आईडी चुनने की तारीख
1003 एंड्रीव ए.ए. 1982-04-17 [ईमेल संरक्षित] 4 3 2015-04-08
1000 इवानोव आई.आई. 1955-02-19 [ईमेल संरक्षित] 2 1 2015-04-08
1001 पेट्रोव पी.पी. 1983-12-03 [ईमेल संरक्षित] 3 3 2015-04-08
1002 सिदोरोव एस.एस. 1976-06-07 [ईमेल संरक्षित] 1 2 2015-04-08

इससे पहले, यदि संकुल अनुक्रमणिका PK_Employees अनुक्रमणिका थी, तो मानक रिकॉर्ड ID फ़ील्ड द्वारा सॉर्ट किए गए थे।

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

Dovіdnikіv कॉल dotsіlno के लिए, प्राथमिक कुंजी, tk द्वारा संकेत के स्कोब क्लस्टर इंडेक्स। अनुरोधों में, हम अक्सर ओट्रीमन्ना के लिए ड्राइवर की पहचान के लिए कहते हैं, उदाहरण के लिए, नामकरण (प्लांट, विदिलु)। यहाँ हम अनुमान लगाते हैं, जो मैंने पहले लिखा था, कि क्लस्टर इंडेक्स की पंक्ति तालिकाओं तक सीधी पहुँच हो सकती है, और तारे स्पष्ट हैं, कि हम अतिरिक्त डेटा के बिना किसी भी तालिका का मान ले सकते हैं।

क्लस्टरिंग इंडेक्स के पानी देने से पहले स्थिर होने की संभावना है, जो कि सबसे आम विकल्प है।

सरोगेट फ़ील्ड द्वारा तालिकाओं में इनोड्स एक कुंजी बनाते हैं, उस कॉलम के y- अक्ष का उपयोग सरोगेट प्राथमिक कुंजी के लिए CLUSTERED इंडेक्स विकल्प के मान को बदलने के लिए किया जाता है और सरोगेट प्राथमिक कुंजी को कॉल करते समय NONCLUSTERED विकल्प निर्दिष्ट करता है।

शायद

इस स्तर पर, हमें सामान्य प्रकार के एक्सचेंजों के बारे में पता चला, उनके सबसे सरल तरीके से, वे "ALTER TABLE im'ya_table_ADD CONSTRAINT im'ya_obrazhennia ..." जैसे कमांड द्वारा बनाए गए हैं:
  • प्राथमिक कुंजी- प्राथमिक कुंजी;
  • विदेशी कुंजी- नालष्टुवन्न्या zv'yazkіv मैं tіl_snostі डेटा को नियंत्रित करता हूं;
  • अद्वितीय- आपको विशिष्टता बनाने की अनुमति देता है;
  • जाँच करना- आपको डेटा प्रविष्टि की शुद्धता को सही करने की अनुमति देता है;
  • गलती करना- आपको लॉक के लिए मान सेट करने की अनुमति देता है;
  • यह भी ध्यान दें कि सभी सुविधाएं विजयी कमांड द्वारा देखी जा सकती हैं ” तालिका में परिवर्तनतालिका नाम ड्रॉप प्रतिबंध im'ya_obezhennya"।
इसलिए हम अक्सर उन इंडेक्स से टकराते हैं और क्लस्टर की अवधारणाओं को सुलझाते हैं ( संकुल) और गैर-क्लस्टर ( गैर-क्लस्टर्ड) अनुक्रमणिका।

स्वतंत्र सूचकांकों का निर्माण

आत्मनिर्भरता के तहत, यहां वे इंडेक्स पर मेहनत कर रहे हैं, क्योंकि वे PRIMARY KEY और UNIQUE के आदान-प्रदान के लिए बनाए गए हैं।

फ़ील्ड या फ़ील्ड पर अनुक्रमणिका एक आपत्तिजनक आदेश के साथ बनाई जा सकती हैं:

कर्मचारियों पर इंडेक्स IDX_Employees_Name बनाएं (नाम)
इसके अलावा यहां आप क्लस्टर किए गए, गैर-क्लस्टर किए गए, अद्वितीय विकल्पों को निर्दिष्ट कर सकते हैं, और आप त्वचा-संलग्न क्षेत्र एएससी (लॉक करके) या डीईएससी की सीधी छंटाई भी निर्दिष्ट कर सकते हैं:

कर्मचारियों पर यूनीक नॉनक्लस्टर्ड इंडेक्स UQ_Employees_EmailDesc बनाएं (ईमेल डीईएससी)
एक गैर-संकुलित सूचकांक के निर्माण के घंटे के तहत, गैर-संकुलित विकल्प की अनुमति दी जा सकती है, क्योंकि umovchannyam के लिए uvazі पर काम नहीं करेगा, यहाँ कमांड में CLUSTERED और NONCLUSTERED विकल्प की स्थिति निर्दिष्ट करने के लिए, यहाँ सरलता से नहीं दिखाया जाएगा।

आप इंडेक्स को आपत्तिजनक कमांड के साथ देख सकते हैं:

कर्मचारियों पर DROP INDEX_Employees_Name
इंडेक्स की तरह ही क्रिएट टेबल कमांड के संदर्भ में सिंपल इंडेक्स बनाए जा सकते हैं।

उदाहरण के लिए, मैं तालिका को फिर से देख सकता हूं:

ड्रॉप टेबल कर्मचारी
І यह हल करने योग्य है її एक क्रिएट टेबल कमांड के साथ एक्सचेंजों और इंडेक्स के निर्माण के साथ:

क्रिएट टेबल कर्मचारी (आईडी int NULL, नाम nvarchar (30), जन्मदिन की तारीख, ईमेल nvarchar (30), स्थिति आईडी int, DepartmentID int, HireDate date NOT NULL CONSTRAINT DF_Employees_HireDATE DEFAULT ), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) संदर्भ विभाग (ID) ), CONSTRAINT FK_Employees_PositionID विदेशी कुंजी (PositionID) संदर्भ स्थिति (ID), CONSTRAINT FK_Employees_ManagerID विदेशी कुंजी (ManagerID) संदर्भ कर्मचारी (ID), CONSTRAINT UQ_Employees_Email UNIQUE(ईमेल), CONSTRAINT CK_Employees_ID CHECK(ID 1000 के बीच और 1999), INDEX IDX_Employees_Name(Name ))
Nasamkіnets को हमारे spіvrobіtnikіv की तालिका में डाला गया है:

इंसर्ट कर्मचारी (आईडी, नाम, जन्मदिन, ईमेल, स्थिति आईडी, विभाग आईडी, प्रबंधक आईडी) मूल्य (1000, एन "इवानोव आई.आई.","19550219"," [ईमेल संरक्षित]",2,1,NULL), (1001,एन"पेट्रोव पी.पी.","19831203"," [ईमेल संरक्षित]",3,3,1003), (1002,N"Sidoriv S.S.","19760607"," [ईमेल संरक्षित]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [ईमेल संरक्षित]",4,3,1000)
अतिरिक्त वर्टो इंगित करता है कि गैर-क्लस्टर इंडेक्स से पहले, आप INCLUDE में їх की अतिरिक्त प्रविष्टि के बाद मान शामिल कर सकते हैं। टोबटो। इस स्थिति में, INCLUDE-index को क्लस्टर्ड इंडेक्स माना जाता है, लेकिन अब यह टेबल के अटैचमेंट का इंडेक्स नहीं है, बल्कि आवश्यक मान इंडेक्स से जुड़े हैं। जाहिर है, इस तरह के इंडेक्स पीने के प्रति चयन (चयन) की उत्पादकता भी बढ़ा सकते हैं, क्योंकि सभी फ़ील्ड इंडेक्स में सूचीबद्ध हैं, तो आपको इंडेक्स में तालिका देखने की आवश्यकता नहीं हो सकती है। एल सीई स्वाभाविक रूप से सूचकांक में योगदान देता है, क्योंकि स्थानांतरित फ़ील्ड के मानों को अनुक्रमणिका में डुप्लिकेट किया गया है।

एमएसडीएन से विरिज़का।अनुक्रमितों को जोड़ने के लिए सामान्य कमांड सिंटैक्स

बनाएँ [अद्वितीय] [क्लस्टर किया हुआ | NONCLUSTERED] INDEX index_name ON (कॉलम [एएससी | डीईएससी] [ ,...एन ]) [ शामिल करें (कॉलम_नाम [ ,...एन ])]

शायद

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

त्वचा के प्रकार में Bazhano इष्टतम समाधान, सुनहरा मतलब, कंपन की दक्षता और समतल नदी पर इन शिलाखंडों के संशोधन को जानने के लिए। इंडेक्स और उनकी मात्रा बनाने की रणनीति विभिन्न कारकों के कारण हो सकती है, उदाहरण के लिए, तालिकाओं में डेटा अक्सर बदल जाता है।

विस्नोवोक शोडो डीडीएल

जैसा कि आप देख सकते हैं, DDL भाषा उतनी सुसंगत नहीं है जितनी पहली नज़र में लग सकती है। यहाँ मैं व्यावहारिक रूप से सभी तीन तालिकाओं के साथ काम कर रहे सभी मुख्य निर्माण दिखा सकता था।

गोलोवेन - सार को समझें, और रेश्ता अभ्यास करें।

SQL नाम के तहत चमत्कारी फिल्म के दायरे में महारत हासिल करने के लिए आपको शुभकामनाएँ।

एसक्यूएल स्ट्रक्चर्ड क्वेरी लैंग्वेज (मोवा स्ट्रक्चर्ड क्वेरीज) का संक्षिप्त नाम है। SQL रिलेशनल बीजगणित पर आधारित है और विशेष रूप से रिलेशनल डेटाबेस के साथ इंटरफेस करने के लिए विकसित किया गया है।

SQL є, हर चीज के लिए, सूचनात्मक और तार्किक खान, बचत डेटा के विवरण, उनके विश्लेषण और संशोधन के लिए मान्यता प्राप्त है। SQL मेरी प्रोग्रामिंग नहीं है। एक बार फिल्म, ध्वनि के उन विशिष्ट कार्यान्वयनों के बारे में, विभिन्न प्रक्रियात्मक विस्तार शामिल हैं।

Mova SQL uk sukupnіstyu ऑपरेटरों, yakі को चोटिरी समूहों में विभाजित किया जा सकता है:

  • DDL (डेटा डेफिनिशन लैंग्वेज) - डेटा डेफिनिशन ऑपरेटर्स
  • डीएमएल (डेटा मैनीपुलेशन लैंग्वेज) - डेटा मैनीपुलेशन ऑपरेटर्स
  • DCL (डेटा कंट्रोल लैंग्वेज) - डेटा एक्सेस करने के लिए ऑपरेटर
  • टीसीएल (लेनदेन नियंत्रण भाषा) - लेनदेन प्रबंधन ऑपरेटर

एसक्यूएल मानकीकृत मेरा है। मानक SQL को ANSI मानक समिति (अमेरिकी राष्ट्रीय मानक संस्थान) द्वारा बनाए रखा जाता है, जिसे जाहिरा तौर पर ANSI SQL कहा जाता है।

बहुत सारे DBMS डेवलपर्स ने निर्देशों में अतिरिक्त ऑपरेटरों को जोड़कर SQL क्षमताओं का विस्तार किया है। अतिरिक्त कार्यों के कार्यान्वयन, या सरल संचालन के कार्यान्वयन के सरलीकरण के लिए कई एक्सटेंशन आवश्यक हैं। मैं अक्सर अधिक korisnі, tsі razshirennya pri'yazanі से sevnoї DBMS में बदबू करना चाहता हूं, यह शायद ही कभी podtremuyuyutsya अधिक nizh एक rozrobnik है। सभी महान DBMSs और navit ti, जैसे कि वे विस्तार कर सकते हैं, ANSI SQL (एक बड़ी और छोटी दुनिया) का समर्थन करते हैं। Okremі कार्यान्वयन उचित नाम (PL-SQL, Transact-SQL आदि) ले जाने के लिए। Transact-SQL (T-SQL) Microsoft का SQL मूवी का कार्यान्वयन है, जैसा कि ज्ञात, गुप्त और SQL सर्वर है।

डेटा के चयन के लिए पूछें (चयन कथन)

SELECT सबसे सामान्य SQL Statement है। तालिका से जानकारी के चयन का कार्य। चयन ऑपरेटर की मदद के लिए, तालिकाओं से डेटा लें, आपको कम से कम दो शब्दों को इंगित करने की आवश्यकता है - आप क्या चुनना चाहते हैं और सितारे।

चयनित ठीक है

चुनना

उत्पाद से

होवर ऑपरेटर पर, उत्पाद तालिका से विवरण नाम के तहत एक कॉलम का चयन करने के लिए चयन कथन का चयन किया जाता है। Im'ya stovptsya, shokaєtsya, zazuєєєєДєєєєєєєі में कीवर्ड का चयन किया जाता है, और कीवर्ड 'FROM' को तालिका में दिखाया जाता है, जिसके लिए डेटा का चयन किया जाता है।

प्रबंधन स्टूडियो में यह परीक्षण करने के लिए, इन चरणों का पालन करें:

स्टोवपतिसिव की संख्या का चयन

प्रविष्टियों की संख्या की तालिका से चयन के लिए, उसी चयन कथन का चयन किया जाता है। Vіdminnіst polagaє में, कीवर्ड चयन के बाद यह आवश्यक है कि किसके माध्यम से stovptsіv के नामों की संख्या निर्दिष्ट की जाए।

चयन करें, इनस्टॉक

उत्पाद से

सभी लेखों का चयन

सबसे महत्वपूर्ण प्रविष्टियों (एक संख्या प्रति संख्या) का चयन करना संभव है, चयन ऑपरेटर की सहायता से, आप उनमें से किसी को ओवरलैप किए बिना सभी प्रविष्टियों का अनुरोध कर सकते हैं। जिसके लिए स्टोवप्ट्सिव के नामों के प्रतिस्थापन के लिए, समूह प्रतीक "ज़ीरोचका" (*) डाला गया है। ऐसे लूटो।

चुनना*

उत्पाद से

डेटा क्रमित करना

चयन के परिणामस्वरूप, डेटा उस क्रम में प्रदर्शित किया जाएगा जिसमें तालिकाओं में बदबू है। चयनित लोगों की सटीक छँटाई के लिए, प्रस्ताव ORDER BY का उपयोग SELECT कथन के अतिरिक्त किया जाता है। इन प्रस्तावों में, यह एक या एक से अधिक संख्या के नाम से इंगित किया जाता है, जिसके लिए परिणामों को क्रमबद्ध करना आवश्यक है। अगला बट देखें।

उत्पाद से

इनस्टॉक द्वारा आदेश

इसलिए, यह प्रस्ताव ORDER BY के संकेत के साथ पिछले वाले के समान है, क्योंकि यह DBMS को इनस्टॉक कॉलम के मूल्य के विकास के अनुसार डेटा को सॉर्ट करने के लिए कहता है।

Kіlkom stovptsami के लिए छंटनी

स्तंभों की संख्या के आधार पर छाँटने के लिए, केवल उनके नाम दर्ज करें जिनके माध्यम से। आपत्तिजनक कोड के लिए तीन शब्दों का चयन किया जाता है, और उनमें से दो के लिए परिणाम क्रमबद्ध किया जाता है - पहले संख्या के लिए, और फिर नाम के लिए।

IdProd, , InStock चुनें

उत्पाद से

इनस्टॉक द्वारा आदेश,

यह समझना महत्वपूर्ण है कि जब स्तंभों की संख्या के आधार पर छँटाई की जाती है, तो छँटाई का क्रम पंक्ति में मानों के समान होगा। दूसरे शब्दों में, स्टॉक पर, इंगित किया गया है, उत्पादों को विवरण कॉलम के अनुसार क्रमबद्ध किया जाता है, केवल तब तक जब तक समान इनस्टॉक मूल्यों वाली पंक्तियाँ हों। यदि इनस्टॉक कॉलम का मान मेल नहीं खाता है, तो विवरण कॉलम के मान क्रमबद्ध नहीं होंगे।

सीधे छँटाई में जाँच करें

ORDER BY प्रस्ताव को अवरोही क्रम द्वारा भी क्रमबद्ध किया जा सकता है। जिसके लिए आपको कीवर्ड डीईएससी निर्दिष्ट करने की आवश्यकता है। आपत्तिजनक बट में, उत्पादों को मात्रा के आधार पर, निचले क्रम में, साथ ही उत्पाद के नाम से क्रमबद्ध किया जाता है।

IdProd, , InStock चुनें

उत्पाद से

इनस्टॉक डीईएससी द्वारा आदेश

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

लेन-देन एसक्यूएल(जैसा कहा गया टी-एसक्यूएल) डेटाबेस ( डेटाबेस) प्रक्रियात्मक भाषा प्रोग्रामिंग, जो एकाधिकार होना चाहिए माइक्रोसॉफ्टऔर में विजयी एस क्यू एल सर्वर.

प्रक्रियात्मक भाषा बुला संभावनाओं का विस्तार करने के लिए डिज़ाइन किया गया है एसक्यूएलके साथ अच्छे एकीकरण की संभावना के साथ एसक्यूएल. स्थानीय परिवर्तन और पंक्तियों/डेटा के प्रसंस्करण जैसे कुछ कार्यों को जोड़ा गया। भाषा को बढ़ावा देने के लिए कार्य करता है ट्यूरिंग-पूर्ण (**).

बदबू का उपयोग सहेजने की प्रक्रियाओं को लिखने के लिए भी किया जाता है: कोड का एक टुकड़ा जो सर्वर पर रहता है, फोल्डिंग बिजनेस नियमों का प्रबंधन करता है, जो शुद्ध सेट-आधारित संचालन को प्रबंधित करना आसान या असंभव हो सकता है।

ट्यूरिंग पूर्णसिस्टम का अर्थ है एक ऐसी प्रणाली जिसमें एक प्रोग्राम लिखा जा सकता है जो एक उत्तर खोजेगा (हालांकि रनटाइम या मेमोरी के संबंध में कोई गारंटी नहीं है)।

2- Transact-SQL को देख रहे हैं

टी-एसक्यूएलकमांड ब्लॉक द्वारा व्यवस्थित, एक कमांड ब्लॉक को दूसरे कमांड ब्लॉक में नेस्ट किया जा सकता है, एक कमांड ब्लॉक जो से शुरू होता है शुरूऔर साथ समाप्त करें अंतब्लॉक में बहुत सारे कमांड हैं, और क्रेमलिन में एक-एक करके डॉट (;) के साथ कमांड हैं।

ब्लॉक संरचना:

BEGIN -- डिक्लेयर वेरिएबल -- T-SQL स्टेटमेंट END;

3- SQL सर्वर प्रबंधन स्टूडियो से प्रारंभ करें

इस लेख में, मैं आपको प्रोग्रामिंग दिखाऊंगा एस क्यू एल सर्वर, एक दृश्य उपकरण पर SQL सर्वर प्रबंधन स्टूडियो.

त्से चित्रण SQL सर्वर प्रबंधन स्टूडियोजब खुला। Є deakі बट डेटाबेसयदि आप पुनः स्थापित करते हैं एस क्यू एल सर्वर.

या आप बना सकते हैं sql , एक छोटा सा डेटा बेस एस क्यू एल सर्वरपर वेबसाइट .

दाहिने माउस पर क्लिक करें डेटाबेस, चुनना "नया प्रश्न" tsgogo के लिए schob vіdkriti vіkno डेटाबेस.

क्या आप प्रोग्राम करने के लिए तैयार हैं डेटाबेसएच एस क्यू एल सर्वर.

कमांड का एक आसान ब्लॉक नीचे दिखाया गया है, 2 नंबरों का योग देखें:

प्रारंभ - एक चर घोषित करना @v_Result Int घोषित करें; - 50 मान के साथ एक चर घोषित करना @v_a Int = 50 घोषित करें; - 100 के मूल्य के साथ एक चर घोषित करना @v_b Int = 100 घोषित करें; - प्रिंट आउट कंसोल (डेवलपर के लिए)। - इंट को स्ट्रिंग में बदलने के लिए कास्ट का उपयोग करना - 2 स्ट्रिंग प्रिंट "v_a =" + कास्ट (@v_a वर्चर (15) के रूप में) को जोड़ने के लिए + ऑपरेटर का उपयोग करना; -- प्रिंट आउट कंसोल Print "v_b=" + Cast(@v_b as varchar(15)); - सम सेट @v_Result = @v_a + @v_b; -- प्रिंट आउट कंसोल Print "v_Result=" + Cast(@v_Result as varchar(15)); अंत;

कमांड के ब्लॉक को चलाने के लिए साइन पर क्लिक करें, और परिणाम पर अचंभा करें SQL सर्वर प्रबंधन स्टूडियो :

4- बेसिक ट्रांजैक्ट-एसक्यूएल कमांड

4.1- इफ-एल्सिफ-एल्स कमांड

वाक्य - विन्यास:

अगर फिर अय्यूब 1; अगर अंत;

BEGIN -- एक चर DECLARE @v_Option पूर्णांक घोषित करें; घोषणा @v_Action varchar(30); सेट @v_Option = 2; अगर @v_Option = 1 सेट @v_Action = "रन"; ELSE IF @v_Option = 2 प्रिंट शुरू करें "अन्य ब्लॉक में यदि @v_Option = 2"; सेट @v_Action = "बैकअप"; अंत; अन्य यदि @v_Option = 3 सेट @v_Action = "रोकें"; अन्य सेट @v_Action = "अमान्य"; - लॉगिंग प्रिंट "@v_Action=" + @v_Action; अंत;

बट के प्रक्षेपण का परिणाम:

4.2- जबकि लूप

चक्र पर जबकितुम जीत सकते हो तोड़नालूप से बाहर निकलने के लिए।
विजय दल जारी रखनाब्लॉक में आदेश छोड़ने के लिए जबकिऔर एक नया चक्र बनाने के लिए नीचे।

< @y WHILE (@x < @y) BEGIN SET @step = @step + 1; -- Every time loop execute, x increases by 1. SET @x = @x + 1; -- Every time loop execute, x decreases by 2. SET @y = @y - 2; PRINT "Step =" + CAST(@step AS varchar(10)); PRINT "@x =" + CAST(@x AS varchar(10)) + " / @y = " + CAST(@y AS varchar(10)); END; -- Write log PRINT "x,y = " + CAST(@x AS varchar(10)) + ", " + CAST(@y AS varchar(10)); END;

बट के प्रक्षेपण का परिणाम:

BEGIN - 2 चर x और y की घोषणा @x पूर्णांक = 0 घोषित करना; DECLARE @y पूर्णांक = 10; - चरण घोषणा @ चरण पूर्णांक = 0; -- जबकि @x< @y WHILE (@x < @y) BEGIN SET @step = @step + 1; -- Every time the loop execute, x increases by 1 SET @x = @x + 1; -- Every time the loop execute, y decreases by 1 SET @y = @y - 2; PRINT "Step =" + CAST(@step AS varchar(10)); PRINT "@x =" + CAST(@x AS varchar(10)) + " / @y = " + CAST(@y AS varchar(10)); -- If @x >2 फिर लूप से बाहर निकलें - (हालांकि WHILE में स्थितियां अभी भी सत्य हैं)। अगर @x > 2 BREAK; अंत; - लॉग प्रिंट लिखें "x,y = "+ कास्ट(@x AS varchar(10)) + "," + CAST(@y AS varchar(10)); अंत;

बट के प्रक्षेपण का परिणाम:

टीम जारी रखनाआपको एक नया लूप शुरू करने के लिए कम कमांड (लूप पर) को छोड़ने की अनुमति देता है।

BEGIN - 2 चर x और y घोषित करना। घोषणा @x पूर्णांक = 0; DECLARE @y पूर्णांक = 10; - चरण घोषणा @ चरण पूर्णांक = 0; -- जबकि @x< @y WHILE (@x < @y) BEGIN SET @step = @step + 1; -- Every time the loop execute, x increases by 1 SET @x = @x + 1; -- Every time the loop execute, x decreases by 2 SET @y = @y - 2; -- If @x < 3 , then skip the statements below -- And continue new step IF @x < 3 CONTINUE; -- If @x < 3 the statements below "CONTINUE" will not be run. PRINT "Step =" + CAST(@step AS varchar(10)); PRINT "@x =" + CAST(@x AS varchar(10)) + " / @y = " + CAST(@y AS varchar(10)); END; -- Write log PRINT "x,y = " + CAST(@x AS varchar(10)) + ", " + CAST(@y AS varchar(10)); END;

5- परिवर्तन से पहले अनुरोध में डेटा संलग्न करें

आप अनुरोध से मूल्य बदल सकते हैं। दृष्टांत बट पर चमत्कार:

असाइन_वैल्यू_उदाहरण

BEGIN - एक चर घोषित करना @v_Emp_ID DECLARE @v_Emp_ID पूर्णांक = 1; DECLARE @v_First_Name varchar(30); DECLARE @v_Last_Name वर्कर (30); DECLARE @v_Dept_ID पूर्णांक; -- वेरिएबल्स के लिए निर्धारित मान SELECT @v_First_Name = emp.First_Name, @v_Last_Name = emp.Last_Name, @v_Dept_Id = emp.Dept_Id FROM Employee Emp WHERE Emp.Emp_ID = @v_Emp_Id; - मूल्य प्रिंट करें PRINT "@v_First_Name =" + @v_First_Name; प्रिंट "@v_Last_Name =" + @v_Last_Name; प्रिंट "@v_Dept_Id =" + CAST(@v_Dept_ID AS varchar(15)); अंत;

बट के प्रक्षेपण का परिणाम:

6- खासतौर पर T-SQL में डेटा देखें

6.1- डेटा टेबल देखें (अंतर्निहित दृश्य)

टी-एसक्यूएलमैं आपको डेटा के प्रकटन के साथ ध्वनि परिवर्तनों की अनुमति देता हूं मेज.

वाक्य - विन्यास:

TABLE प्रकार के एक चर को परिभाषित करें। - नोट: परामर्श भी आगे के परामर्श के अधीन हो सकते हैं (उदाहरण देखें)। @V_variable_name टेबल घोषित करें (कॉलम 1 डेटा टाइप 1, कॉलम 2 डेटा टाइप 2);

तालिका प्रकार के लिए पैरामीटर का असाइनमेंट। डिक्लेयर @v_Table टेबल (फर्स्ट_नाम वर्कर (30), लास्ट_नाम वर्कर (30), डिपार्टमेंट_आईडी इंटीजर, सैलरी फ्लोट); - हेल्पर्स हेल्पर्स को भी ले सकते हैं: @v_table टेबल (Product_ID पूर्णांक पहचान (1,1) प्राथमिक कुंजी, Product_Name DataType2 NOT NULL Default ("अज्ञात"), प्राइस मनी चेक (कीमत) घोषित करें< 10.0));

उदाहरण: बदलने के लिए डेटा डालें मेज.

आप अपडेट भी कर सकते हैं अद्यतनसामान्य नज़र में मेज:

मिटानासामान्य नज़र में मेज:

जिज्ञासापरिवर्तन पर डेटा देखें मेज:

BEGIN DECLARE @v_Emp_ID पूर्णांक = 1; -- प्रकार तालिका का एक चर घोषित करें। DECLARE @v_Table टेबल (First_Name varchar(30), Last_Name varchar(30), Dept_Id पूर्णांक, वेतन फ़्लोट DEFAULT 1000); - वेरिएंट INSERT INTO स्टेटमेंट @v_Table में डेटा डालने के लिए। @v_Table में डालें (First_name, Last_Name, Dept_ID) चुनें emp.First_Name, emp.Last_Name, emp.Dept_Id FROM कर्मचारी Emp WHERE Emp.Emp_ID< 4; -- Update @v_Table UPDATE @v_Table SET Salary = Salary + 100 WHERE First_name = "Susan"; -- Query @v_Table. SELECT * FROM @v_Table; END;

बट के प्रक्षेपण का परिणाम:

6.2- डेटा दृश्य तालिका (स्पष्ट दृश्य)

टी-एसक्यूएलमैं आपको विडी के परिवर्तन की आवाज उठाने की अनुमति देता हूं मेजअप्रत्यक्ष तरीके से। परिवर्तन का नाम से प्रारंभ होता है # .

BEGIN -- #v_My_Table में डेटा डालने से पहले लेख में चयन करने के लिए लिंक करें। emp.First_Name, emp.Last_Name, emp.Dept_Id, 1000 वेतन का चयन करें #v_My_Table में कर्मचारी कर्मचारी से जहां Emp.Emp_ID< 4; -- Update #v_My_Table UPDATE #v_My_Table SET Salary = Salary + 100 WHERE First_name = "Susan"; -- Query #v_My_Table. SELECT * FROM #v_My_Table; END;

बट के प्रक्षेपण का परिणाम:

7- कर्सर

7.1- कर्सर क्या है?

कर्सरसीई संरचना प्रकार का परिवर्तन, जो आपको डीकैल पंक्तियों में डेटा संसाधित करने की अनुमति देता है। अनुरोध के क्रम पर पड़ने वाली पंक्तियों की संख्या। प्रसंस्करण और हेरफेर की प्रक्रिया में कर्सरडेटा की चमड़े की पंक्ति के माध्यम से। डेटा की यह पंक्ति कर्सर द्वारा इंगित की जाती है। कर्सर को बदलकर, आप डेटा की सभी पंक्तियों तक पहुँच सकते हैं।

7.2- कर्सर को आवाज दें

वाक्य - विन्यास

आईएसओ सिंटैक्स डिक्लेयर कर्सर_नाम [असंवेदनशील] [स्क्रॉल] सेलेक्ट_स्टेटमेंट के लिए कर्सर [फॉर (रीड ओनली | अपडेट [ऑफ कॉलम_नाम [,...एन]]]] ग्लोबल] [फॉरवर्ड_ओनली | स्क्रॉल] [स्थैतिक | कीसेट | गतिशील | FAST_FORWARD] [ केवल पढ़ने के लिए | स्क्रॉल_लॉक | ऑप्टिमिस्टिक ] [ TYPE_WARNING ] For select_statement [ FOR UPDATE [ OF column_name [ ,...n ] ] ] [;]

7.3- कर्सर के साथ स्टॉक

लर्निंगएसक्यूएल का प्रयोग करें; BEGIN -- -- एक चर घोषित करें: DECLARE @v_Emp_ID पूर्णांक; घोषणा @v_First_Name varchar(50); DECLARE @v_Last_Name varchar(50); DECLARE @v_Count पूर्णांक; - एक कर्सर घोषित करें। DECLARE My_Cursor CURSOR for SELECT Emp.EMP_ID, Emp.FIRST_NAME, Emp.LAST_NAME FROM Employee Emp WHERE EMP.EMP_ID< 3; -- Open Cursor OPEN My_Cursor; -- Move the cursor to the first record. -- And assign column values to variables. FETCH NEXT FROM My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; -- The FETCH statement was successful. (@@FETCH_STATUS = 0) WHILE @@FETCH_STATUS = 0 BEGIN PRINT "First Name = "+ @v_First_Name+" / Last Name = "+ @v_Last_Name; -- Move to the next record. -- And assign column values to the variables FETCH NEXT FROM My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; END -- Close Cursor. CLOSE My_Cursor; DEALLOCATE My_Cursor; END;

बट के प्रक्षेपण का परिणाम:

7.4- मैच का बट कर्सर से

लर्निंगएसक्यूएल का प्रयोग करें; BEGIN -- -- एक चर घोषित करें: DECLARE @v_Emp_ID पूर्णांक; घोषणा @v_First_Name varchar(50); DECLARE @v_Last_Name varchar(50); - एक कर्सर चर घोषित करना। घोषणा @My_Cursor कर्सर; - CURSOR वेरिएबल के लिए सेलेक्ट स्टेटमेंट सेट करें। @My_Cursor = CURSOR को सेलेक्ट EMP.EMP_ID, Emp.FIRST_NAME, Emp.LAST_NAME के ​​लिए कर्मचारी कर्मचारी से सेट करें जहाँ Emp.EMP_ID< 3; -- Open Cursor OPEN @My_Cursor; -- Move the cursor to the first line. -- And assign column values to the variables. FETCH NEXT FROM @My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; -- The FETCH statement was successful. (@@FETCH_STATUS = 0) WHILE @@FETCH_STATUS = 0 BEGIN PRINT "First Name = "+ @v_First_Name+" / Last Name = "+ @v_Last_Name; -- Move to the next record. -- And assign column values to the variables. FETCH NEXT FROM @My_Cursor INTO @v_Emp_ID, @v_First_Name, @v_Last_Name; END -- Close Cursor. CLOSE @My_Cursor; DEALLOCATE @My_Cursor; END;

परिणाम उदाहरण चलाते हैं:

8- स्विच ऑफ करना

प्रोग्रामिंग करते समय टी-एसक्यूएलआपके पास अपने कोड के लिए क्षमा हो सकती है, उदाहरण के लिए, क्षमा जब आप इसे 0 पर सेट करते हैं। अन्यथा, यदि आप एक क्षमा सम्मिलित करते हैं, यदि आप एक रिकॉर्ड सम्मिलित करते हैं, तो आप प्राथमिक कुंजी के साथ मान को डुप्लिकेट करते हैं, ... आपको इसकी आवश्यकता है इस स्थिति को ठीक करने के लिए।

एक साधारण बट पर अचंभा, कैसे एक क्षमा को सही किया जाए जब इसे 0 से गिरा दिया गया हो।

ट्राईकैच_उदाहरण

लर्निंगएसक्यूएल का प्रयोग करें; BEGIN -- -- एक चर घोषित करें: DECLARE @v_a फ्लोट = 20; घोषणा @v_b फ्लोट = 0; घोषणा @v_c फ्लोट; DECLARE @v_Error_Number पूर्णांक; - चैटर एरर के लिए BEGIN TRY... END TRY लिखें। -- इस ब्लॉक के लिए क्षमा कैसे प्राप्त करें -- आप BEGIN CATCH... END CATCH ब्लॉक पर कूद जाएंगे। BEGIN TRY --- PRINT "@v_a=" + CAST(@v_a AS varchar(15)); प्रिंट "@v_b =" + CAST(@v_b AS varchar(15)); - योग के कारण, 0 त्रुटि से विभाजित करें। सेट @v_c = @v_a / @v_b; -- इस रेखा के नीचे नहीं चल रहा होगा। -- प्रोग्राम जंप टू ब्लॉक BEGIN CATCH .. END CATCH PRINT "@v_c=" + CAST(@v_c AS varchar(15)); END TRY -- BEGIN CATCH .. END CATCH को BEGIN TRY .. END TRY के ठीक पीछे रखा गया है। बिगिन कैच - एरर नंबर। सेट @v_Error_Number = ERROR_NUMBER (); - प्रिंट आउट त्रुटि संख्या: प्रिंट "त्रुटि संख्या:" + CAST(@v_Error_Number AS varchar(15)); - त्रुटि संदेश: प्रिंट "त्रुटि संदेश:" + ERROR_MESSAGE (); - फ्रंट एरर: प्रिंट "एरर सेवरिटी:" + कास्ट (ERROR_SVERITY () AS वर्चर (15)); - एरर स्टेट: प्रिंट "एरर स्टेट:" + कास्ट (ERROR_STATE () AS वर्चर (15)); - रेखा संख्या: प्रिंट "त्रुटि रेखा:" + कास्ट (ERROR_LINE () एएस वर्कर (15)); - प्रक्रिया का नाम (या फ़ंक्शन, या ट्रिगर)। प्रिंट "त्रुटि प्रक्रिया:" + ERROR_PROCEDURE (); अंत पकड़ो; अंत;

परिणाम

क्षमा सूचना:

समारोह विवरण
ERROR_NUMBER() क्षमा संख्या चालू करें।
त्रुटि संदेश() मैं आपको क्षमा के बारे में बताता हूँ। सूचनाओं में मापदंडों द्वारा दिए गए मान शामिल होते हैं, जैसे दिनांक, वस्तु का नाम या घंटा।
ERROR_SVERITY () क्षमा की गम्भीरता के चक्रव्यूह को मोड़ो।
ERROR_STATE () क्षमा स्थिति चालू करें।
ERROR_LINE () पंक्ति संख्या को क्षमा कोड में बदलें
ERROR_PROCEDURE() नाम घुमाओ संग्रहीत प्रक्रियाया चालू कर देना, डे क्षमा हो गया

9- कार्य

याक प्रक्रिया(प्रक्रिया), समारोह(फंक्शन) - कमांड टी-एसक्यूएल, मुख्य भूमिका को बदलने के लिए प्रक्रिया के दृश्य पर, फ़ंक्शन सप्ताह के घंटे के अनुसार मूल्य को घुमाता है।
समारोह में ही सहेजा जा सकता है डेटाबेसनजर में स्टोर प्रक्रिया.

फ़ोल्डर सिंटैक्स समारोह(कार्य)।

Function_name: -- तर्क: -- मोड: इनपुट, आउटपुट, डिफ़ॉल्ट इनपुट -- डेटाटाइप: क्रिएट फंक्शन ([ @argument1 datatype1 , @argument2 datatype2 , ... ]) रिटर्न डेटाटाइप जैसे BEGIN -- डिक्लेयर वेरिएबल्स -- स्टेटमेंट्स -- रिटर्न वैल्यू END;

पैरामीटर के साथ फ़ंक्शन CREATE FUNCTION Sum_Ab(a Integer, b Integer) RETURNS Integer AS Write return a + b; अंत; - मापदंडों के बिना फ़ंक्शन CREATE FUNCTION Get_Current_Datetime() रिटर्न की तारीख के रूप में रिटर्न CURRENT_TIMESTAMP; अंत;

ड्रॉप फ़ंक्शन:

ड्रॉप फंक्शन ड्रॉप फंक्शन ; -- बट के लिए: DROP FUNCTION My_Function;

बट तह कार्य:

आपके पहले हाथ का बट समारोह(कार्य) एच एस क्यू एल सर्वर:

  1. एक समारोह बनाएँ
  2. संकलन समारोह
  3. समारोह प्रारंभ

फंक्शन सेव करें - जैसे ही यह लागू होता है, इसे क्रम में बदलें, नए के लिए बनाएं। IF OBJECT_ID(N"dbo.My_Sum", N"FN") IS NOT NULL DROP FUNCTION My_Sum; GO CREATE FUNCTION My_Sum (@p_a फ्लोट, @p_b फ्लोट) रिटर्न फ्लोट एज़ बेगिन - डिक्लेयरिंग वेरिएबल टाइप ऑफ़ फ्लोट DECLARE @v_C फ्लोट; - v_C SET @V_C = @p_A + @p_B के लिए मूल्य निर्दिष्ट करें; -- प्रतिलाभ की मात्रा। वापसी @v_C; अंत;

कार्य को पूरा करने के लिए चिह्न पर क्लिक करें।

जैसा कि आपने बनाया है, फ़ंक्शन एक साधारण फ़ंक्शन है जो स्केलर-वैल्यू को घुमाता है। आप इस बारे में बात कर सकते हैं कि यह कैसा चल रहा है SQLServer प्रबंधन स्टूडियो:

आप दाईं ओर माउस दबाकर फ़ंक्शन का विरोध कर सकते हैं, चुनें:

  • स्क्रिप्ट फ़ंक्शन के रूप में -> चयन करें -> नई क्वेरी संपादक विंडो

परीक्षण बॉक्स की जाँच करें, आप पैरामीटर मान बदल सकते हैं:

पैरामीटर मान बदलें और लॉन्च पर क्लिक करें।

कार्य टीम का भाग्य ले सकते हैं चुनना.

खाते खाते से acc.account_id, acc.cust_id, acc.avail_balance, acc.pending_balance, dbo.MY_SUM(acc.avail_balance, acc.pending_balance) शेष राशि चुनें;

SQL क्वेरी का परिणाम:

10- प्रक्रिया

कमान समूह टी-एसक्यूएल, जिसे प्रक्रिया (प्रक्रिया) में चुना जा सकता है, ताकि आप विकास की प्रतिभा, शपथ ग्रहण, सुरक्षा, डेटा की सुरक्षा की संभावना को बढ़ा सकें।

प्रक्रियाओं में सहेजा जा सकता है डेटाबेसयाक वस्तु वाई डेटाबेसपुनरावलोकन के लिए तैयार है। प्रक्रिया को संसर्ग कहा जाता है स्टोर प्रक्रिया. शोब विकोनाती स्टोर प्रक्रिया, बचत के तुरंत बाद स्टोर प्रक्रिया, बदबू में संकलित हैं पी-कोडकि vikonnanny द्वारा प्रोत्साहित किया जा सकता है।

प्रक्रियाएं मानों को सीधे कार्यों के रूप में नहीं घुमाती हैं ( समारोह). अली, शायद मां 0 या अधिक पैरामीटर छोड़ने के लिए।

समापन प्रक्रिया के लिए सिंटेक्स:

प्रक्रिया_नाम: -- तर्क: -- मोड: इनपुट प्रकार: इनपुट या आउटपुट, डिफ़ॉल्ट इनपुट है -- डेटा प्रकार: -- नोट: वैकल्पिक पैरामीटर () या अनावश्यक में दर्ज किए जा सकते हैं। प्रक्रिया बनाएँ [ तर्क1 डेटाटाइप 1 , तर्क 2 डेटाटाइप 2 , ... ] शुरुआत के रूप में - चर घोषित करें। - वक्तव्य .. अंत; - या: प्रक्रिया बनाएँ ([ तर्क1 डेटाटाइप 1 , तर्क 2 डेटाटाइप 2 , ... ]) शुरुआत के रूप में - चर घोषित करें। - वक्तव्य .. अंत;

मापदंडों के बिना प्रक्रिया। क्रिएट प्रोसीजर Do_Something AS Start - यहां वेरिएबल डिक्लेयर करें। @v_a पूर्णांक घोषित करें; -- यहाँ कुछ करो -- .... समाप्त; - मापदंडों के साथ प्रक्रिया - 1 इनपुट पैरामीटर और 2 इनपुट पैरामीटर क्रिएट प्रोसीजर Do_Something (@p_Param1 Varchar(20), @v_Param2 Varchar(50) OUTPUT) AS Start - डिक्लेयर वेरिएबल्स डिक्लेयर @v_a इंटेगर; - यहाँ कुछ करो। -- ...अंत;

ड्रॉप प्रक्रिया:

ड्रॉप प्रक्रिया: ड्रॉप प्रक्रिया

विकोनन्न्या प्रक्रिया के लिए क्रोकी:

तह प्रक्रिया का एक उदाहरण:

Get_Employee_Infos

Get_Employee_Infos अगर यह पहले से मौजूद है तो प्रक्रिया को छोड़ दें। -- (रीक्रिएट को सक्षम करने के लिए) यदि OBJECT_ID(N"dbo.Get_Employee_Infos", N"P") IS NOT NULL DROP PROCEDURE Get_Employee_Infos; जाओ - इनपुट पैरामीटर के साथ प्रक्रिया: p_Emp_Id - और आउटपुट: v_First_Name, v_Last_Name, v_Dept_Id। CREATE PROCEDURE Get_Employee_Infos (@p_Emp_Id पूर्णांक , @v_First_Name varchar(50) OUTPUT , @v_Last_Name varchar(50) OUTPUT , @v_Dept_Id पूर्णांक OUTPUT) -- पूर्णांक को स्ट्रिंग (Varchar) में बदलने के लिए Cast का उपयोग करें। - दो स्ट्रिंग्स को जोड़ने के लिए + ऑपरेटर का उपयोग करें। प्रिंट "पैरामीटर @p_Emp_Id =" + CAST(@p_Emp_ID AS varchar(15)); -- -- तालिका जैसे डेटा को क्वेरी करें और वेरिएबल्स को मान असाइन करें। -- SELECT @v_First_Name = Emp.First_Name, @v_Last_Name = Emp.Last_Name, @v_Dept_Id = Emp.Dept_Id FROM Employee Emp WHERE Emp.Emp_Id = @p_Emp_Id; -- -- लॉग (डेवलपर्स के लिए)। - प्रिंट "रिकॉर्ड मिला!"; प्रिंट "@v_First_Name=" + @v_First_Name; प्रिंट "@v_Last_Name=" + @v_Last_Name; प्रिंट "@v_Dept_Id=" + CAST(@v_Dept_Id AS varchar(15)); अंत;

  • मार्क ए पॉइंट सहेजेंलेन-देन में: लेन-देन सहेजें name_of_savepoint
  • @@ट्रांसकाउंटचर: स्ट्रीमिंग सत्र में जीतने के लिए निर्दिष्ट लेन-देन संख्या (रोलबैक या कमिट के साथ पूरा नहीं)।
    1. टीम रोलबैक ट्रॅन + tên_của_savepointलेन-देन को अंतिम स्थिति में रोलबैक करने में मदद करें पॉइंट सहेजें(पूर्ण लेनदेन के प्रभाव के बिना), हेरफेर खत्म होने पर अवरुद्ध (ताले) अनलॉक (अनलॉक) हो जाएंगे रोलबैकगायन तत्व।
    2. जब एक स्पष्ट लेन-देन उजागर हो जाता है, तो इस पर फिर से बातचीत करना आवश्यक है कि इसे जब्त किया जा सकता है ( रोलबैक) या एक स्पष्ट दृश्य पर स्थिर ( वादा करना), हालांकि नहीं, लेन-देनदूसरों की मदद करने वाले संसाधनों को उधार लेना और उधार लेना जारी रखें लेनदेन.
    3. टीम रोलबैकडेटाबेस में केवल लेन-देन बताने में मदद ( डालना, मिटाना, अद्यतन). अन्य आदेश, उदाहरण के लिए, संलग्न करें, कमांड में झूठ न बोलें रोलबैक.

    लेन-देन_उदाहरण1

    BEGIN - किस खाते में खाता ACCOUNT_ID = 1, 2 वास्तव में DB में मौजूद है - वास्तव में आप लेन-देन शुरू होने से पहले जांच के लिए विवरण लिख सकते हैं - खाता A (पहले से ही DB में गारंटी मौजूद है) DECLARE @Account_Id_A inte 1; - खाता बी (डीबी में पहले से ही गारंटी मौजूद है) DECLARE @Account_Id_B पूर्णांक = 2; -- राशि घोषित @अमाउंट फ्लोट = 10; - बैंक घोषणा @Execute_Branch_Id पूर्णांक = 1; - लेन-देन की गणना लिखें। - मान्य, इस समय कोई लेन-देन नहीं है और PRINT "@@TranCount = " + CAST(@@Trancount AS varchar(5)); प्रिंट "लेनदेन शुरू करें"; - लेन-देन शुरू करें TRAN शुरू करें; - फंसाने में त्रुटि। BEGIN TRY -- -- खाते में $10 घटाएं एक अद्यतन खाता सेट AVAIL_BALANCE = AVAIL_BALANCE - @Amount WHERE Account_Id = @Account_Id_A; -- -- Acc_Transaction तालिका में लेन-देन की जानकारी डालें। ACC_TRANSACTION में डालें (TXN_DATE, FUNDS_AVAIL_DATE, TXN_TYPE_CD, ACCOUNT_ID, AMOUNT, EXECUTION_BRANCH_ID) VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, "CDT", @Account_Id_A -- -- खाता B में $10 जोड़ें। खाता सेट अपडेट करें AVAIL_BALANCE = AVA IL_BALANCE + @Amount WHERE Account_Id = @Account_Id_B;-- Acc_Transaction तालिका में लेन-देन की जानकारी डालें। ACC_TRANSACTION में प्रवेश करें (TXN_DATE, FUNDS_AVAIL_DATE, TXN_TYPE_CD, ACCOUNT_ID, AMOUNT, EXECUTION_BRANCH_ID) VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, "CDT", @Account_Id_B; - प्रतिबद्ध लेन-देन IF @ @ ट्रैंकाउंट > 0 प्रिंट "कमिट ट्रांजैक्शन"; कमिट ट्रॅन; एंड ट्राई -- अगर आप जानते हैं कि क्षमा कैच ब्लॉक को निष्पादित किया जाएगा। बिगिन कैच प्रिंट "एरर:" + ERROR_MESSAGE (); प्रिंट "एरर -> रोलबैक ट्रांजैक्शन"; IF @@ ट्रैंकाउंट > 0 रोलबैक ट्रॅन;एंड कैच;एंड;

    बट के प्रक्षेपण का परिणाम:

    12-ट्रिगर

    ट्रिगर के बारे में लेख जोड़ा गया है, आप मदद के लिए निर्देश देख सकते हैं:

    • टूडो लिंक!