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

वास्तविक दुनिया की समस्याओं को हल करने के लिए सरल SQL सर्वर कार्य

परिचय

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

सर्वर के बारे में डेटा डेटाबेस में संग्रहीत किया गया था, और पंक्ति दर पंक्ति के बिना एप्लिकेशन से इसे अपडेट करने का कोई तरीका नहीं था। इस प्रकार, हमें LEN और SUBSTRING (या REPLACE) SQL सर्वर फ़ंक्शंस का उपयोग करके एक कुशल समाधान के साथ आना पड़ा।

पर्यावरण का पुनरुत्पादन

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

लिस्टिंग 1 दर्शाती है कि हम अपनी उदाहरण तालिका कैसे बनाते और भरते हैं:

-- Listing 1: Create and Populate Node_Saps Table
create database postilion;

use postilion
go
-- drop table node_saps
create table node_saps (
[node] varchar(50)
      ,[sap] varchar(50)
      ,[type] varchar(50)
      ,[protocol] varchar(50)
      ,[address] varchar(50)
	  ,[setup_data] varchar(50)
      ,[secure] varchar(50)
      ,[max_nr_conn] varchar(50)
      ,[msg_mode] varchar(50)
      ,[nr_active_conns] varchar(50)
      ,[filter_properties] varchar(50)
	  )

use postilion
go
insert into node_saps values ('EGH01',2,'sink','TCP','10.2.100.42_atm_ghana', 100,'YES',10,'open',5,'intense');
insert into node_saps values ('EGH02',3,'sink','TCP','10.2.100.42_atm_ghana', 120,'YES',10,'open',5,'moderate');
insert into node_saps values ('ENG01',4,'source','TCP','10.2.100.42_atm_nigeria', 175,'YES',40,'open',19,'premium');
insert into node_saps values ('EBF01',6,'sink','TCP','10.2.100.42_atm_burkina', 122,'YES',20,'open',4,'intense');
insert into node_saps values ('EGQ01',7,'sink','TCP','10.2.100.42_atm_equatorial', 200,'YES',10,'open',2,'moderate');

इस तालिका में कुछ सरल कॉलम हैं। यहां रुचि का कॉलम पता . है कॉलम। हमारा काम आईपी एड्रेस को 10.2.100.42 से बदलकर 10.2.100.79 करना है।

जैसा कि चित्र 1 में दिखाया गया है, पता कॉलम में संग्रहीत डेटा केवल IP पता नहीं है। यह एक स्ट्रिंग है, और IP पता इसका केवल एक हिस्सा है। इसलिए, हम एक साधारण अद्यतन नहीं कर सकते। प्रत्येक पंक्ति का एक अलग मान होता है, और हमें IP पते के अंतिम ऑक्टेट को अलग करना चाहिए और उसमें परिवर्तन करना चाहिए।

SUBSTRING() फ़ंक्शन का उपयोग करके SQL सर्वर में स्ट्रिंग के भाग को बदलें

कार्य आवश्यकताओं को प्राप्त करने के लिए, हम दो सरल कार्यों का उपयोग करते हैं:LEN () फ़ंक्शन और SUBSTRING () फ़ंक्शन। हम उदाहरण के साथ SQL सर्वर में SUBSTRING प्रदान करेंगे।

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

लिस्टिंग 2 और चित्र 2 पता कॉलम में .42 को .79 से बदलने के परिणाम की कल्पना करने के लिए कोड दिखाते हैं।

-- Listing 2: Select Statement to Verify Solution
USE postilion
GO
SELECT [node]
      ,[sap]
      ,[type]
      ,[protocol]
      ,[address]
,substring (address,1,9) + '79' + substring (address,12,20) manrep
      ,[setup_data]
      ,[secure]
      ,[max_nr_conn]
      ,[msg_mode]
      ,[nr_active_conns]
      ,[filter_properties]
  FROM [postilion].[dbo].[node_saps]
WHERE len(address) > 10

नोट:हमने एक गणना कॉलम तैयार किया है। इस प्रकार, हम उन परिवर्तनों को लागू करने से पहले मूल मानों की तुलना परिवर्तनों से कर सकते हैं।

REPLACE() फ़ंक्शन का उपयोग करके SQL में स्ट्रिंग के भाग को अपडेट करें

हम इसे REPLACE () फ़ंक्शन का उपयोग करके सरल कर सकते थे। यह निर्दिष्ट स्ट्रिंग मान की सभी घटनाओं को दूसरे स्ट्रिंग मान से बदल देता है।

REPLACE फ़ंक्शन एक स्ट्रिंग देता है जहां यह एक सबस्ट्रिंग को दूसरे सबस्ट्रिंग से बदल देता है।

लिस्टिंग 3 में कोड पर एक नज़र डालें। हमें ठीक वैसा ही परिणाम मिलता है जैसा कि चित्र 2 में दिखाया गया है।

-- Listing 3: Select Statement to Verify Solution Using REPLACE()
USE postilion
GO
SELECT [node]
      ,[sap]
      ,[type]
      ,[protocol]
      ,[address]
,replace(address,'.42','.79') rep
      ,[setup_data]
      ,[secure]
      ,[max_nr_conn]
      ,[msg_mode]
      ,[nr_active_conns]
      ,[filter_properties]
  FROM [postilion].[dbo].[node_saps]
WHERE len(address) > 10

अपडेट स्टेटमेंट में सबस्ट्रिंग फ़ंक्शन के लिए सिंटैक्स

आइए SELECT स्टेटमेंट का उपयोग करके हमारे समाधान की कल्पना करें। हमें यह देखने की जरूरत है कि हमने सबस्ट्रिंग () फ़ंक्शन या आसान REPLACE () फ़ंक्शन के साथ LEN () फ़ंक्शन को कहाँ शामिल किया है।

लिस्टिंग 4 दर्शाता है कि हम UPDATE स्टेटमेंट को कैसे निष्पादित करते हैं। सुरक्षा के लिए, हम इसे लेनदेन में संलग्न करते हैं। अगर कुछ भी गलत है, तो हम उसे वापस ले सकेंगे।

-- Listing 4: UPDATE Statement Using SUBSTRING()

BEGIN TRAN
update [postilion].[dbo].[node_saps]
set address=substring (address,1,9) + '79' + substring (address,12,20)
where substring (address,10,2)= '42' and
len(address) > 10

SELECT * FROM [postilion].[dbo].[node_saps]

--ROLLBACK
--COMMIT

यदि हम परिणामों से संतुष्ट हैं, तो हम बस प्रतिबद्ध हैं।

अपडेट स्टेटमेंट में SQL REPLACE फ़ंक्शन का उपयोग करना

हम SQL में REPLACE () फ़ंक्शन का उपयोग करके समान परिणाम प्राप्त कर सकते हैं (सूची 5 देखें)। यह हमारे विशिष्ट डेटा के कारण काम करता है, ".42" प्रत्येक पंक्ति में केवल एक बार होता है।

-- Listing 5: UPDATE Statement Using REPLACE()

BEGIN TRAN
update [postilion].[dbo].[node_saps]
set address=replace(address,'.42','.79')
where substring (address,10,2)= '42' and
len(address) > 10

SELECT * FROM [postilion].[dbo].[node_saps]

--ROLLBACK
--COMMIT

निष्कर्ष

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

इसके अलावा, हमने सावधानियां बरतीं:

  • हमने सेलेक्ट स्टेटमेंट और एक कंप्यूटेड कॉलम का इस्तेमाल यह तय करने के लिए किया कि अंतिम परिणाम कैसा दिखेगा।
  • हमने रोलबैक . सुनिश्चित करने के लिए लेनदेन में अपना अद्यतन विवरण संलग्न किया है विकल्प।

आप एहतियाती उपाय करने में और आगे बढ़ सकते हैं और डेटाबेस का बैकअप बना सकते हैं:

संदर्भ

  1. लेन () फ़ंक्शन
  2. सबस्ट्रिंग () फ़ंक्शन
  3. प्रतिस्थापन समारोह

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Microsoft ने SQL Server 2012 R2 और SQL Server 2012 R3 की घोषणा की!

  2. तालिका/डेटाबेस के वर्ण सेट का निर्धारण?

  3. R DBI ODBC त्रुटि:nanodbc/nanodbc.cpp:3110:07009:[Microsoft] [SQL सर्वर के लिए ODBC ड्राइवर 13] अमान्य डिस्क्रिप्टर इंडेक्स

  4. एक कॉलम को कई पंक्तियों में विभाजित करें

  5. मैं SQL Server 2008 R2 में CONCAT फ़ंक्शन का उपयोग कैसे करूं?