डेटा सम्मिलित करें
Transact-SQL पंक्तियों को तालिका में सम्मिलित करने के कई तरीके प्रदान करता है.
INSERT कथन
INSERT कथन का उपयोग किसी तालिका में एक या अधिक पंक्तियाँ जोड़ने के लिए किया जाता है. कथन के कई रूप हैं।
एक साधारण INSERT कथन का मूल सिंटैक्स नीचे दिखाया गया है:
INSERT [INTO] <Table> [(column_list)]
VALUES ([ColumnName or an expression or DEFAULT or NULL],…n)
INSERT कथन के इस रूप के साथ, जिसे INSERT VALUES कहा जाता है, आप उन स्तंभों को निर्दिष्ट कर सकते हैं जिनमें मान रखे जाएंगे और वह क्रम जिसमें तालिका में सम्मिलित प्रत्येक पंक्ति के लिए डेटा प्रस्तुत किया जाएगा। column_list वैकल्पिक है लेकिन अनुशंसित है। column_list के बिना, INSERT कथन तालिका के प्रत्येक स्तंभ के लिए उस क्रम में मान की अपेक्षा करेगा जिस क्रम में स्तंभ निर्धारित किए गए थे. आप उन स्तंभों के मान अल्पविराम से अलग की गई सूची के रूप में भी प्रदान कर सकते हैं.
मानों को सूचीबद्ध करते समय, कीवर्ड DEFAULT का अर्थ एक पूर्वनिर्धारित मान है, जो तालिका बनाते समय निर्दिष्ट किया गया था, का उपयोग किया जाएगा. डिफ़ॉल्ट निर्धारित करने के तीन तरीके हैं:
- यदि किसी स्तंभ को स्वचालित रूप से जनरेट किए गए मान के रूप में परिभाषित किया गया है, तो उस मान का उपयोग किया जाएगा. स्वतः उत्पन्न मूल्यों पर इस मॉड्यूल में बाद में चर्चा की जाएगी।
- जब कोई तालिका बनाई जाती है, तो किसी स्तंभ के लिए डिफ़ॉल्ट मान प्रदान किया जा सकता है, और यदि DEFAULT निर्दिष्ट किया जाता है तो उस मान का उपयोग किया जाएगा.
- यदि NULL मानों को अनुमति देने के लिए कोई स्तंभ निर्धारित किया गया है, और स्तंभ स्वतः जेनरेटेड स्तंभ नहीं है और उसमें डिफ़ॉल्ट रूप से परिभाषित नहीं है, तो NULL को DEFAULT के रूप में सम्मिलित किया जाएगा.
तालिका निर्माण का विवरण इस मॉड्यूल के दायरे से परे है। हालांकि, यह देखना अक्सर उपयोगी होता है कि तालिका में कौन से कॉलम हैं। सबसे आसान तरीका यह है कि किसी भी पंक्ति को वापस किए बिना टेबल पर एक SELECT स्टेटमेंट निष्पादित करें। WHERE शर्त का उपयोग करके जो कभी भी TRUE नहीं हो सकती, कोई पंक्ति वापस नहीं की जा सकती.
SELECT * FROM Sales.Promotion
WHERE 1 = 0;
यह कथन आपको सभी स्तंभ और उनके नाम दिखाएगा, लेकिन डेटा प्रकार या कोई भी गुण नहीं दिखाएगा, जैसे कि NULLs की अनुमति है या यदि कोई डिफ़ॉल्ट मान निर्दिष्ट है. क्वेरी से आउटपुट का एक उदाहरण इस तरह दिख सकता है:
प्रचार का नाम
प्रारंभदिनांक
ProductModelID
छूट
नोट्स
इस तालिका में डेटा सम्मिलित करने के लिए, आप यहाँ दिखाए गए अनुसार सम्मिलित करें कथन का उपयोग कर सकते हैं.
INSERT INTO Sales.Promotion (PromotionName,StartDate,ProductModelID,Discount,Notes)
VALUES
('Clearance Sale', '01/01/2021', 23, 0.1, '10% discount');
ऊपर दिए गए इस उदाहरण के लिए, स्तंभ सूची को छोड़ा जा सकता है, क्योंकि हम सही क्रम में प्रत्येक स्तंभ के लिए मान प्रदान कर रहे हैं:
INSERT INTO Sales.Promotion
VALUES
('Clearance Sale', '01/01/2021', 23, 0.1, '10% discount');
मान लें कि तालिका इस तरह निर्धारित की गई है कि वर्तमान दिनांक का डिफ़ॉल्ट मान StartDate स्तंभ पर लागू होता है, और नोट्स स्तंभ नल मानों की अनुमति देता है. आप इंगित कर सकते हैं कि आप इन मानों का स्पष्ट रूप से उपयोग करना चाहते हैं, इस तरह:
INSERT INTO Sales.Promotion
VALUES
('Pull your socks up', DEFAULT, 24, 0.25, NULL);
वैकल्पिक रूप से, आप INSERT कथन में मानों को छोड़ सकते हैं, जिस स्थिति में परिभाषित होने पर डिफ़ॉल्ट मान का उपयोग किया जाएगा, और यदि कोई डिफ़ॉल्ट मान नहीं है लेकिन कॉलम NULLs की अनुमति देता है, तो एक NULL डाला जाएगा। यदि आप सभी स्तंभों के लिए मान प्रदान नहीं कर रहे हैं, तो आपके पास एक स्तंभ सूची होनी चाहिए जो इंगित करती हो कि आप कौन से स्तंभ मान प्रदान कर रहे हैं.
INSERT INTO Sales.Promotion (PromotionName, ProductModelID, Discount)
VALUES
('Caps Locked', 2, 0.2);
एक समय में एकल पंक्ति सम्मिलित करने के अतिरिक्त, मानों के एकाधिक अल्पविराम से अलग किए गए सेट प्रदान करके एकाधिक पंक्तियाँ सम्मिलित करने के लिए INSERT VALUES कथन का उपयोग किया जा सकता है. मानों के सेट भी अल्पविराम द्वारा अलग किए जाते हैं, जैसे:
(col1_val,col2_val,col3_val),
(col1_val,col2_val,col3_val)
मानों की इस सूची को तालिका मान निर्माता के रूप में जाना जाता है. टेबल वैल्यू कन्स्ट्रक्टर के साथ हमारी टेबल में दो और पंक्तियों को सम्मिलित करने का एक उदाहरण यहां दिया गया है:
INSERT INTO Sales.Promotion
VALUES
('The gloves are off!', DEFAULT, 3, 0.25, NULL),
('The gloves are off!', DEFAULT, 4, 0.25, NULL);
अंतःस्थापित करना।।। चुनना
INSERT कथन में मानों का शाब्दिक सेट निर्दिष्ट करने के अतिरिक्त, T-SQL INSERT के लिए मान प्रदान करने के लिए अन्य कार्रवाइयों के परिणामों का उपयोग करने का भी समर्थन करता है. आप INSERT कथन के लिए मान प्रदान करने के लिए किसी SELECT कथन के परिणामों या संग्रहीत कार्यविधि के आउटपुट का उपयोग कर सकते हैं.
नेस्टेड SELECT के साथ INSERT का उपयोग करने के लिए, VALUES खंड को प्रतिस्थापित करने के लिए एक SELECT कथन बनाएँ. INSERT SELECT नामक इस प्रपत्र के साथ, आप SELECT क्वेरी द्वारा लौटाए गए पंक्तियों के सेट को गंतव्य तालिका में सम्मिलित कर सकते हैं. INSERT SELECT का उपयोग INSERT VALUES के समान विचार प्रस्तुत करता है:
- आप वैकल्पिक रूप से तालिका नाम के बाद एक स्तंभ सूची निर्दिष्ट कर सकते हैं।
- आपको प्रत्येक स्तंभ के लिए स्तंभ मान या DEFAULT, या NULL प्रदान करना आवश्यक है.
निम्न सिंटैक्स INSERT SELECT के उपयोग को दिखाता है:
INSERT [INTO] <table or view> [(column_list)]
SELECT <column_list> FROM <table_list>...;
नोट
संग्रहीत कार्यविधियों (या यहां तक कि गतिशील बैचों) से परिणाम सेट का उपयोग INSERT कथन के इनपुट के रूप में भी किया जा सकता है। INSERT का यह रूप, जिसे INSERT EXEC कहा जाता है, संकल्पनात्मक रूप से INSERT SELECT के समान है और समान विचार प्रस्तुत करेगा। हालांकि, संग्रहीत प्रक्रियाएं कई परिणाम सेट लौटा सकती हैं, इसलिए अतिरिक्त देखभाल की आवश्यकता है।
निम्न उदाहरण Production.ProductModel से मॉडल ID और मॉडल नाम पुनर्प्राप्त करके Get Framed नामक नए प्रचार के लिए एकाधिक पंक्तियाँ सम्मिलित करता है, प्रत्येक मॉडल के लिए तालिका जिसमें उसके नाम में "frame" शामिल है.
INSERT INTO Sales.Promotion (PromotionName, ProductModelID, Discount, Notes)
SELECT DISTINCT 'Get Framed', m.ProductModelID, 0.1, '10% off ' + m.Name
FROM Production.ProductModel AS m
WHERE m.Name LIKE '%frame%';
एक सबक्वेरी के विपरीत, एक INSERT के साथ उपयोग किया गया नेस्टेड SELECT कोष्ठक में संलग्न नहीं है।
चुनना।।। में
पंक्तियों को सम्मिलित करने के लिए एक अन्य विकल्प, जो INSERT SELECT के समान है, SELECT INTO कथन है। INSERT SELECT और SELECT INTO के बीच सबसे बड़ा अंतर यह है कि SELECT INTO का उपयोग किसी मौजूदा तालिका में पंक्तियाँ सम्मिलित करने के लिए नहीं किया जा सकता है, क्योंकि यह हमेशा एक नई तालिका बनाता है जो SELECT के परिणाम पर आधारित होती है. नई तालिका के प्रत्येक स्तंभ का नाम, डेटा प्रकार और SELECT सूची में संगत स्तंभ (या व्यंजक) के समान नाम, डेटा प्रकार और शून्यता होगी.
SELECT INTO का उपयोग करने के लिए, क्वेरी के SELECT क्लॉज में INTO <new_table_name> जोड़ें, FROM क्लॉज के ठीक पहले। यहाँ एक उदाहरण दिया गया है जो Sales.SalesOrderHeader तालिका से Sales.Invoice.नामक नई तालिका में डेटा निकालता है..
SELECT SalesOrderID, CustomerID, OrderDate, PurchaseOrderNumber, TotalDue
INTO Sales.Invoice
FROM Sales.SalesOrderHeader;
एक चयन में विफल हो जाएगा यदि पहले से ही INTO के बाद निर्दिष्ट नाम के साथ एक तालिका है। तालिका बनने के बाद, इसे किसी अन्य तालिका की तरह माना जा सकता है। आप इसमें से चयन कर सकते हैं, इसे अन्य तालिकाओं में शामिल कर सकते हैं, या इसमें अधिक पंक्तियाँ सम्मिलित कर सकते हैं।