इस लेख में, मैं निम्नलिखित प्रदर्शित करने जा रहा हूँ:
- SQL तालिका में तालिका-मूल्यवान फ़ंक्शन के आउटपुट को कैसे सम्मिलित करें।
- रिमोट डेटाबेस सर्वर पर बनाए गए टेबल-वैल्यू फ़ंक्शन का आउटपुट कैसे डालें।
“इन्सर्ट इन” स्टेटमेंट क्या है
RDBMS में, "इन्सर्ट इन" मूल SQL स्टेटमेंट में से एक है। इसका उपयोग SQL तालिका में नए रिकॉर्ड डालने के लिए किया जाता है। कथन का उपयोग करके, हम निम्नलिखित कार्य कर सकते हैं:
- एक तालिका में नए रिकॉर्ड सम्मिलित करें (मूल सम्मिलन)।
- किसी तालिका में विशिष्ट कॉलम के मान सम्मिलित करें।
- संग्रहीत कार्यविधि द्वारा उत्पन्न आउटपुट को SQL तालिका में सम्मिलित करें।
उपरोक्त को प्रदर्शित करने के लिए, "विद्यार्थी . नाम की एक तालिका बनाते हैं डेमोडेटाबेस पर। तालिका बनाने के लिए निम्न कोड निष्पादित करें:
CREATE TABLE STUDENTS ( ID INT IDENTITY(1, 1) PRIMARY KEY, FIRSTNAME VARCHAR(250), LASTNAME VARCHAR(250), ADMISSIONDATE DATETIME, GRADE CHAR(1) )
बेसिक इंसर्ट करें
बुनियादी इंसर्ट करने के लिए, हमें लक्ष्य तालिका का नाम और तालिका का मान प्रदान करना होगा। निम्नलिखित मूल सम्मिलन कथन का मूल वाक्यविन्यास है:
INSERT INTO <target TABLE NAME> VALUES ( <value FOR COLUMN 1 >, <value FOR COLUMN 1 >.. )
उदाहरण के लिए, हम "छात्र" तालिका में तीन छात्रों का पहला नाम, अंतिम नाम और ग्रेड सम्मिलित करना चाहते हैं। ऐसा करने के लिए, निम्न कोड निष्पादित करें:
INSERT INTO STUDENTS VALUES ('NISARG', 'UPADHYAY', '2018-09-11', 'A'), ('RAGHAV', 'DATTA', '2017-10-01', 'A'), ('KIRAN', 'AMIN', '2016-01-31', 'A')
परिणामों की समीक्षा करने के लिए "छात्र" के खिलाफ "चयन करें" क्वेरी निष्पादित करें।
SELECT FIRSTNAME, LASTNAME, ADMISSIONDATE, GRADE FROM STUDENTS
परिणाम इस प्रकार है:
तालिका में किसी विशिष्ट स्तंभ के मान सम्मिलित करें
किसी तालिका के विशिष्ट स्तंभों में मान सम्मिलित करने के लिए, आपको लक्ष्य तालिका का नाम और उन स्तंभों का नाम प्रदान करना होगा जिनमें आप डेटा सम्मिलित करना चाहते हैं। निम्नलिखित वाक्य रचना है।
INSERT INTO <TARGET TABLE NAME> ( COLUMN 1 , COLUMN 2 ) VALUES ( <VALUE FOR COLUMN 1 >, <VALUE FOR COLUMN 1 >.. )
उदाहरण के लिए, हम "छात्रों . में दो छात्रों का पहला नाम और अंतिम नाम सम्मिलित करना चाहते हैं " टेबल। ऐसा करने के लिए, निम्न कोड निष्पादित करें:
INSERT INTO STUDENTS (FIRSTNAME, LASTNAME) VALUES ('NIMESH', 'UPADHYAY'), ('RUPESH', 'DATTA')
"विद्यार्थी . के विरुद्ध "चुनें" क्वेरी निष्पादित करें "तालिका।
SELECT FIRSTNAME, LASTNAME, ADMISSIONDATE, GRADE FROM STUDENTS
आउटपुट इस प्रकार दिखता है:
आउटपुट डालें, संग्रहित प्रक्रिया द्वारा उत्पन्न करें
तालिका में संग्रहीत कार्यविधि के आउटपुट को सम्मिलित करने के लिए, हमें लक्ष्य तालिका का नाम और स्रोत संग्रहीत कार्यविधि निर्दिष्ट करने की आवश्यकता है। संग्रहीत कार्यविधि के आउटपुट को उत्पन्न करने के लिए, हमें "exec" या "EXECUTE" कीवर्ड का उपयोग करने की आवश्यकता है। इसलिए, हमें "exec" कीवर्ड के बाद तालिका का नाम या कॉलम का नाम प्रदान करना होगा। निम्नलिखित सिंटैक्स है:
INSERT INTO <TARGET TABLE NAME> ( COLUMN 1 , COLUMN 2 ) EXEC <PROCEDURENAME>
उदाहरण के लिए, हम उस प्रक्रिया के आउटपुट को सम्मिलित करना चाहते हैं जो उन छात्रों के नामों को पॉप्युलेट करता है जिनकी प्रवेश तिथि शून्य नहीं है। ऐसा करने के लिए, हम “spGet_Student_AdmissionDate नाम की एक संग्रहित प्रक्रिया बनाएंगे। " संग्रहीत कार्यविधि बनाने के लिए, निम्न कोड निष्पादित करें:
USE DEMODATABASE GO CREATE PROCEDURE SPGET_STUDENT_ADMISSIONDATE AS BEGIN SELECT ISNULL(FIRSTNAME, '') + ' ' + ISNULL(LASTNAME, '') AS STUDENTNAME, ADMISSIONDATE, GRADE FROM STUDENTS WHERE ADMISSIONDATE IS NOT NULL END
एक बार प्रक्रिया बन जाने के बाद, निम्नलिखित कोड को निष्पादित करके प्रक्रिया को चलाएँ:
EXECUTE spGet_Student_Admissiondate
आउटपुट इस प्रकार दिखता है:
जैसा कि मैंने ऊपर उल्लेख किया है, हम "spGet_Student_Admissiondate नामक संग्रहीत कार्यविधि का आउटपुट सम्मिलित करना चाहते हैं। "एक अस्थायी तालिका में। सबसे पहले, तालिका बनाने के लिए निम्न कोड निष्पादित करें:
( ID INT IDENTITY(1, 1), STUDENTNAME VARCHAR(250), ADMISSIONDATE DATETIME, GRADE CHAR(1) )
एक बार तालिका बन जाने के बाद, "spGet_Student_Admissiondate का आउटपुट सम्मिलित करने के लिए निम्न कोड निष्पादित करें " से "#TempStudents .
INSERT INTO #TEMPSTUDENTS EXECUTE SPGET_STUDENT_ADMISSIONDATE Output: (3 rows affected)
आइए अब “#TEMPSTUDENTS . का आउटपुट देखें " ऐसा करने के लिए, निम्न कोड निष्पादित करें:
अब, जैसा कि मैंने ऊपर उल्लेख किया है, मैं यह प्रदर्शित करने जा रहा हूं कि हम SQL तालिका में तालिका-मूल्यवान फ़ंक्शन द्वारा उत्पन्न आउटपुट को कैसे सम्मिलित कर सकते हैं। सबसे पहले, आइए समझते हैं कि टेबल-वैल्यू फ़ंक्शन क्या है।
टेबल-वैल्यूड फंक्शन क्या है
तालिका-मूल्यवान फ़ंक्शन एक विशेष टी-एसक्यूएल कोड है जो पैरामीटर/पैरामीटर स्वीकार करता है और एक चर में परिभाषित शर्तों के आधार पर, तालिका चर में सेट परिणाम देता है। तालिका-मूल्यवान फ़ंक्शन का उपयोग करने के निम्नलिखित लाभ हैं:
- इसे चुनिंदा क्वेरी के भीतर निष्पादित किया जा सकता है।
- इसका उपयोग क्वेरी के कई हिस्सों में किया जा सकता है, उदाहरण के लिए केस स्टेटमेंट में, जहां/क्लॉज हैं।
- तालिका-मूल्यवान फ़ंक्शन का आउटपुट एक रिकॉर्डसेट है, इसलिए आप तालिका के साथ फ़ंक्शन में शामिल हो सकते हैं।
SQL तालिका में इनलाइन तालिका-मूल्यवान फ़ंक्शन का आउटपुट सम्मिलित करें
इस खंड में, मैं यह समझाने जा रहा हूं कि T-SQL का उपयोग करके SQL तालिका में तालिका-मूल्यवान फ़ंक्शन के आउटपुट को कैसे सम्मिलित किया जाए।
प्रदर्शन के लिए, मैं AdventureWorks2014 डेटाबेस का उपयोग कर रहा हूं। मैंने "GetEmployeesbyHireDate . नामक एक इनलाइन बहु-मूल्यवान तालिका फ़ंक्शन बनाया है ।" यह फ़ंक्शन एक विशिष्ट तिथि और समय के भीतर काम पर रखे गए कर्मचारियों की जानकारी को पॉप्युलेट करता है। फ़ंक्शन @FormDate . का उपयोग करता है और @Toda डेटा फ़िल्टर करने के लिए ते पैरामीटर। फ़ंक्शन का आउटपुट SQL तालिका में संग्रहीत किया जाएगा।
निम्न कोड एक फ़ंक्शन बनाता है:
CREATE FUNCTION GETEMPLOYEESBYHIREDATE (@FROMDATE AS DATETIME, @TODATE AS DATETIME) RETURNS @EMPLOYEES TABLE ( EMPLOYEENAME VARCHAR (MAX), BIRTHDATE DATETIME, JOBTITLE VARCHAR(150), EMAILID VARCHAR(100), PHONENUMBER VARCHAR(20), HIREDATE DATETIME ) AS BEGIN INSERT INTO @EMPLOYEES SELECT ( ISNULL( B.FIRSTNAME, '') + ' ' + ISNULL( B.MIDDLENAME, '') + ' ' + ISNULL( B.LASTNAME, '') )AS EMPLOYEENAME, A.BIRTHDATE, B.JOBTITLE, B.EMAILADDRESS, B.PHONENUMBER, A.HIREDATE FROM [HUMANRESOURCES].[EMPLOYEE] A INNER JOIN [HUMANRESOURCES].[VEMPLOYEE] B ON A.BUSINESSENTITYID = B.BUSINESSENTITYID WHERE A.HIREDATE BETWEEN @FROMDATE AND @TODATE RETURN END
Select query का उपयोग करके, हम SQL Function का Output प्राप्त कर सकते हैं। उदाहरण के लिए, आप वर्ष 2009 के भीतर भर्ती किए गए कर्मचारियों की एक सूची तैयार करना चाहते हैं। सूची प्राप्त करने के लिए निम्न क्वेरी निष्पादित करें:
DECLARE @FROMDT DATETIME DECLARE @TODT DATETIME SET @FROMDT='2009-01-01' SET @TODT='2009-12-31' SELECT * FROM GETEMPLOYEESBYHIREDATE(@FROMDT, @TODT)
उपरोक्त क्वेरी का आउटपुट इस प्रकार दिखता है:
अब, “tblEmployee . नाम की एक टेबल बनाएं e" "GetEmployeesbyHiredate . के आउटपुट को स्टोर करने के लिए " समारोह। निम्न कोड “tblकर्मचारी . नाम की तालिका बनाता है .
CREATE TABLE TBLEMPLOYEES ( EMPLOYEENAME VARCHAR (MAX), BIRTHDATE DATETIME, JOBTITLE VARCHAR(150), EMAILID VARCHAR(100), PHONENUMBER VARCHAR(20), HIREDATE DATETIME )
जैसा कि मैंने पहले उल्लेख किया है, हम उन कर्मचारियों की जानकारी भरना चाहते हैं, जिन्हें 2009 में काम पर रखा गया था। ऐसा करने के लिए, GetEmployeesbyHireDate का आउटपुट डालें। tblकर्मचारियों . में कार्य करते हैं टेबल। ऐसा करने के लिए, निम्न कोड निष्पादित करें:
DECLARE @FROMDT DATETIME DECLARE @TODT DATETIME SET @FROMDT='2009-01-01' SET @TODT='2009-12-31' INSERT INTO TBLEMPLOYEES SELECT EMPLOYEENAME, BIRTHDATE, JOBTITLE, EMAILID, PHONENUMBER, HIREDATE FROM GETEMPLOYEESBYHIREDATE(@FROMDT, @TODT)
आइए सत्यापित करें कि डेटा तालिका में डाला गया है। ऐसा करने के लिए, निम्न कोड निष्पादित करें:
SELECT * FROM TBLEMPLOYEES
आउटपुट इस प्रकार दिखता है:
दूरस्थ डेटाबेस से तालिकाओं में डेटा सम्मिलित करें
कभी-कभी, आप किसी भिन्न डेटा केंद्र में संग्रहीत सर्वर से डेटा निकालना चाह सकते हैं। यह SQL लिंक्ड सर्वर का उपयोग करके किया जा सकता है।
इस खंड में, मैं समझाऊंगा कि रिमोट सर्वर पर बनाए गए टेबल वैल्यू फ़ंक्शन के आउटपुट को कैसे सम्मिलित किया जाए। अब परिदृश्य को प्रदर्शित करने के लिए, निम्नलिखित सेटअप है।
[टेबल आईडी=57 /]
डेमो में, हम निम्नलिखित कार्य करेंगे:
- स्रोत सर्वर पर (SQL_VM_1 ), “getCustomerByCountry . नाम का एक टेबल-वैल्यू फंक्शन बनाएं "AdventureWorks2014 . पर "डेटा को पॉप्युलेट करने के लिए डेटाबेस।
- गंतव्य सर्वर पर, "Remote_Server . नाम का एक लिंक किया गया सर्वर बनाएं " फ़ंक्शन निष्पादित करने के लिए (getCustomerByCountry )।
- गंतव्य सर्वर पर, "ग्राहक . नाम की एक तालिका बनाएं रिमोट फ़ंक्शन द्वारा पुनर्प्राप्त डेटा संग्रहीत करने के लिए (getCustomerByCountry )।
निम्न छवि सेटअप को दर्शाती है।
स्रोत सर्वर पर किया जाने वाला कार्य:
स्रोत सर्वर पर (SQL_VM_1 ), “getCustomerByCountry . नामक एक फ़ंक्शन बनाएं ।" यह किसी विशिष्ट देश या क्षेत्र में स्थित ग्राहक के विवरण को पॉप्युलेट करता है। फ़ंक्शन @देशनाम . का उपयोग करता है डेटा फ़िल्टर करने के लिए पैरामीटर फ़ंक्शन बनाने के लिए निम्न कोड निष्पादित करें।
Alter FUNCTION Getcustomerbycountry(@CountryName VARCHAR) returns @Customers TABLE ( customer_name VARCHAR(500), phoennumber VARCHAR(50), emailaddress VARCHAR(100), address VARCHAR(max), city VARCHAR(150), country VARCHAR(250), postalcode VARCHAR(50)) AS BEGIN INSERT INTO @Customers SELECT customer_name, phoennumber, emailaddress, address, city, country, postalcode FROM customers WHERE country [email protected] RETURN END
गंतव्य सर्वर पर किए जाने वाले कार्य:
स्रोत सर्वर से डेटा पॉप्युलेट करने के लिए (SQL_VM_1 ), सबसे पहले, स्रोत के बीच एक लिंक किया गया सर्वर बनाएं (SQL_VM_1 ) और गंतव्य (SQL_VM_ 2))। गंतव्य सर्वर पर निम्न कोड निष्पादित करें (SQL_VM_2 ) लिंक्ड सर्वर बनाने के लिए।
USE [MASTER] GO EXEC MASTER.DBO.SP_ADDLINKEDSERVER @SERVER = N'SQL_VM_1', @SRVPRODUCT=N'SQL SERVER' GO EXEC MASTER.DBO.SP_ADDLINKEDSRVLOGIN @RMTSRVNAME=N' Remote_Server',@USESELF=N'FALSE',@LOCALLOGIN=NULL,@RMTUSER=N'SA',@RMTPASSWORD='########' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'COLLATION COMPATIBLE', @OPTVALUE=N'TRUE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'DATA ACCESS', @OPTVALUE=N'TRUE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'DIST', @OPTVALUE=N'FALSE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'PUB', @OPTVALUE=N'FALSE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'RPC', @OPTVALUE=N'TRUE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'RPC OUT', @OPTVALUE=N'TRUE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'SUB', @OPTVALUE=N'FALSE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'CONNECT TIMEOUT', @OPTVALUE=N'0' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'COLLATION NAME', @OPTVALUE=NULL GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'LAZY SCHEMA VALIDATION', @OPTVALUE=N'FALSE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'QUERY TIMEOUT', @OPTVALUE=N'0' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'USE REMOTE COLLATION', @OPTVALUE=N'TRUE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'REMOTE PROC TRANSACTION PROMOTION', @OPTVALUE=N'FALSE' GO
एक बार लिंक किया गया सर्वर बन जाने के बाद, ग्राहकों की जानकारी संग्रहीत करने के लिए एक SQL तालिका बनाएं, और स्रोत सर्वर पर बनाए गए SQL फ़ंक्शन को निष्पादित करके इसे पॉप्युलेट करें (SQL_VM_1 )।
तालिका बनाने के लिए निम्न कोड निष्पादित करें।
USE DEMODATABASE GO CREATE TABLE CUSTOMERS ( ID INT IDENTITY(1, 1), CUSTOMER_NAME VARCHAR(500), PHONENUMBER VARCHAR(50), EMAILADDRESS VARCHAR(100), ADDRESS VARCHAR(MAX), CITY VARCHAR(150), COUNTRY VARCHAR(250), POSTALCODE VARCHAR(50) )
एक लिंक किए गए सर्वर का उपयोग करके, हम दूरस्थ डेटाबेस सर्वर पर बनाए गए तालिका-मूल्यवान फ़ंक्शन को निष्पादित कर सकते हैं। जब आप लिंक्ड सर्वर का उपयोग करके फ़ंक्शन को निष्पादित करने का प्रयास करते हैं, तो निम्न त्रुटि होती है:
Msg 4122, Level 16, State 1, Line 28 Remote table-valued function calls are not allowed.
इसलिए रिमोट सर्वर पर किसी भी फ़ंक्शन को निष्पादित करने के लिए, हमें OPENQUERY कीवर्ड का उपयोग करने की आवश्यकता है। इसका उपयोग लिंक किए गए सर्वर का उपयोग करके तदर्थ वितरित क्वेरी को प्रारंभ करने के लिए किया जाता है। OPENQUERY की अवधारणा को समझने के लिए इस लेख को देखें।
OPENQUERY का उपयोग करने के लिए, हमें "तदर्थ वितरित क्वेरी" नामक उन्नत कॉन्फ़िगरेशन पैरामीटर सक्षम करने की आवश्यकता है "स्रोत और गंतव्य सर्वर पर। इसे सक्षम करने के लिए निम्न कोड निष्पादित करें।
USE MASTER GO EXEC SP_CONFIGURE 'SHOW ADVANCED OPTION', 1 RECONFIGURE WITH OVERRIDE EXEC SP_CONFIGURE 'AD HOC DISTRIBUTED QUERIES', 1 RECONFIGURE WITH OVERRIDE
अब मैं यूनाइटेड किंगडम में स्थित ग्राहकों की सूची को पॉप्युलेट करना चाहता हूं और उन्हें "ग्राहकों" में सम्मिलित करना चाहता हूं " टेबल। जैसा कि मैंने उल्लेख किया है, फ़ंक्शन रिकॉर्ड्स को फ़िल्टर करने के लिए देश का नाम स्वीकार करता है। अब, हमें गंतव्य सर्वर पर निम्न स्क्रिप्ट निष्पादित करने की आवश्यकता है (SQL_VM_2 ) "यूनाइटेड किंगडम" में स्थित ग्राहकों की सूची तैयार करने के लिए।
SELECT CUSTOMER_NAME, PHOENNUMBER, EMAILADDRESS, ADDRESS, CITY, COUNTRY, POSTALCODE FROM OPENQUERY([TTI609-VM2], 'DECLARE @COUNTRY VARCHAR(150) SET @COUNTRY=''UNITED KINGDOM'' SELECT * FROM [ADVENTUREWORKS2014].DBO.GETCUSTOMERBYCOUNTRY(''''+ @COUNTRY +'''')' )
आउटपुट इस प्रकार दिखता है:
अब, "ग्राहक" तालिका में पॉप्युलेट किए गए डेटा को सम्मिलित करने के लिए, गंतव्य सर्वर पर निम्न स्क्रिप्ट निष्पादित करें (SQL_VM_2 )।
INSERT INTO CUSTOMERS (CUSTOMER_NAME,PHONENUMBER,EMAILADDRESS,ADDRESS,CITY,COUNTRY,POSTALCODE) SELECT CUSTOMER_NAME, PHOENNUMBER, EMAILADDRESS, ADDRESS, CITY, COUNTRY, POSTALCODE FROM OPENQUERY([TTI609-VM2], 'DECLARE @COUNTRY VARCHAR(150) SET @COUNTRY=''UNITED KINGDOM'' SELECT * FROM [ADVENTUREWORKS2014].DBO.GETCUSTOMERBYCOUNTRY(''''+ @COUNTRY +'''')' ) /*Output*/ (1913 rows affected)
अब सत्यापित करते हैं कि डेटा ठीक से डाला गया है या नहीं। जाँच करने के लिए, निम्न क्वेरी को गंतव्य सर्वर (SQL_VM_2) पर निष्पादित करें।
USE DEMODATABASE GO SELECT TOP 20 CUSTOMER_NAME, PHONENUMBER, EMAILADDRESS, ADDRESS, CITY, COUNTRY, POSTALCODE FROM CUSTOMERS
आउटपुट इस प्रकार दिखता है:
सारांश
इस लेख में मैंने कवर किया है:
- “इन्सर्ट इन” स्टेटमेंट और इसका उपयोग।
- SQL तालिका में तालिका-मूल्यवान फ़ंक्शन के आउटपुट को कैसे सहेजना है।
- लिंक्ड सर्वर का उपयोग करके दूरस्थ सर्वर पर स्थित SQL तालिका में तालिका-मूल्यवान फ़ंक्शन के आउटपुट को कैसे सहेजना है।