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

ट्रांजैक्ट-एसक्यूएल में संयोजन

परिचय

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

CONCAT फ़ंक्शन

CONCAT फ़ंक्शन दो या अधिक स्ट्रिंग तर्कों को स्वीकार करता है और ऐसे स्ट्रिंग्स के संयोजन को एकल व्यंजक के रूप में लौटाता है। यह उपयोगी हो सकता है यदि आप विभिन्न स्तंभों की सामग्री को एकल अभिव्यक्ति के रूप में प्रदर्शित करना चाहते हैं। इस फ़ंक्शन का उपयोग करने का एक सरल उदाहरण लिस्टिंग 1 में दिखाया गया है।

-- Listing 1: Simple CONCAT Statement
select CONCAT('This','Function','joins','strings.') as statement1;
select CONCAT('This ','Function ','joins ','strings.') as statement2;
select CONCAT('This',' ','Function',' ','joins',' ','strings') as statement

चित्र 1 में दिए गए रिक्त स्थान और परिणामों का उपयोग करके इस कथन की विविधताओं पर ध्यान दें।

अंजीर। 1. सरल CONCAT कथन

यदि हम INT डेटा प्रकार के इनपुट मान के साथ CONCAT स्टेटमेंट का उपयोग करने का प्रयास करते हैं, तो SQL सर्वर एक अंतर्निहित रूपांतरण करता है और फिर भी एक स्ट्रिंग आउटपुट देता है जैसा कि चित्र 2 में दिखाया गया है। हम पुष्टि कर सकते हैं कि वास्तव में यही हो रहा है। सूची 2 में दिए गए कथन का विवरण। सबसे पहले, उस तालिका की संरचना पर एक नज़र डालें जिसमें हम रुचि रखते हैं। चित्र 2 हमें दिखाता है कि फ़ोन नंबर# और FirstTranDate कॉलम क्रमशः BIGINT और DATETIME कॉलम हैं।

अंजीर। 2. ग्राहक तालिका की संरचना

-- Listing 2: Implicit Conversion When using CONCAT (BIGINT)
USE EXAM
GO
SELECT CONCAT(firstname
, ' '
,lastname
, '''s '
, 'Phone number is '
,phonenumber1) 
FROM CUSTOMER;

निष्पादन योजना पर एक त्वरित नज़र डालने से हमें पता चलता है कि SQL सर्वर एक अंतर्निहित रूपांतरण करता है PhoneNumber1 कॉलम पर। यह वही होगा यदि कॉलम दिनांक डेटा प्रकार था जैसा कि लिस्टिंग 4 और अंजीर में दिखाया गया है। 4. CONCAT फ़ंक्शन चित्र 6 में दिखाए गए चार्ट में उल्लिखित नियमों के आधार पर अंतर्निहित रूपांतरण करता है।

अंजीर। 3. BIGINT डेटा प्रकार का VARCHAR में निहित रूपांतरण

-- Listing 3: Implicit Conversion When using CONCAT (DATETIME)
USE EXAM
GO
SELECT FirstTranDate, CONCAT(FirstName
, ' '
,LastName
, '''s '
, 'first transaction date is '
,FirstTranDate) as STMT
FROM CUSTOMER;

अंजीर। 4. . का निहित रूपांतरण DATETIME डेटा प्रकार VARCHAR के लिए

अंजीर। 5. BIGINT डेटा प्रकार का VARCHAR में निहित रूपांतरण

अंजीर। 6. SQL सर्वर में डेटा प्रकार रूपांतरण

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

CONCAT_WS फ़ंक्शन

CONCAT_WS फ़ंक्शन CONCAT फ़ंक्शन का विस्तार है। यह हमें वांछित विभाजक को पहले पैरामीटर के रूप में निर्दिष्ट करने की अनुमति देता है। लिस्टिंग 4 हमें पहले लिस्टिंग 1 में इस्तेमाल किए गए बयानों में से एक का संशोधन दिखाता है।

--Listing 4 Using CONCAT_WS
SELECT CONCAT('This',' ','Function',' ','joins',' ','strings') AS statement;
SELECT CONCAT('This',' ','Function',' ','joins',' ','strings') AS statement;
SELECT CONCAT_WS(' ','This','Function','joins','strings') AS statement;

ध्यान दें कि CONCAT_WS प्रत्येक तर्क के बाद एक स्पेस को एक तर्क के रूप में पेश करने की तुलना में एक विभाजक के रूप में स्पेस के साथ एक स्टेटमेंट बनाना आसान बनाता है।

--Listing 5 Using CONCAT_WS with Columns
USE EXAM
GO
SELECT CONCAT(firstname
, ' '
,lastname
, '''s '
, 'Phone number is '
,phonenumber1) 
FROM CUSTOMER;


USE EXAM
GO
SELECT CONCAT_WS(' ',firstname
,lastname
, '''s '
, 'Phone number is'
,phonenumber1) 
FROM CUSTOMER;

“+” चिह्न के साथ संयोजन

CONCAT फ़ंक्शन बहुत सरल तरीके से जो करता है उसे प्राप्त करने के लिए SQL सर्वर "+" चिह्न के उपयोग का समर्थन करता है। यह दृष्टिकोण आमतौर पर टी-एसक्यूएल स्टेटमेंट उत्पन्न करने के लिए उपयोग किया जाता है जब आपको बड़ी संख्या में ऑब्जेक्ट्स पर संचालन करने की आवश्यकता होती है। लिस्टिंग 7 से पता चलता है कि हम परीक्षा डेटाबेस में सभी तालिकाओं के लिए सांख्यिकी अद्यतन बैच कैसे उत्पन्न कर सकते हैं।

-- Listing 6 Generating Update Stats Statements
USE Exam
GO
SELECT 'UPDATE STATISTICS ' + name + ' WITH SAMPLE 25 PERCENT;' as STMT from sys.tables ;
SELECT 'UPDATE STATISTICS [' + name + '] WITH SAMPLE 25 PERCENT;' as STMT from sys.tables ;
GO

दूसरे कथन में वर्गाकार कोष्ठकों पर ध्यान दें। रिक्त स्थान या विशेष वर्णों वाले सिस्टम ऑब्जेक्ट के साथ व्यवहार करते समय यह उपयोगी होता है।

-- Listing 7 Generating Create User Statements
USE MASTER
GO
SELECT 'CREATE USER [' + LOGINNAME + '] FOR LOGIN [' + LOGINNAME + '] ;' 
AS STMT FROM SYSLOGINS
WHERE LOGINNAME NOT LIKE '#%';
GO
USE EXAM
GO
CREATE USER [sa] FOR LOGIN [sa] ;
CREATE USER [EPG-KIGIRI\ekocauris] FOR LOGIN [EPG-KIGIRI\ekocauris] ;
CREATE USER [KAIROSAFRIKA\kigiri] FOR LOGIN [KAIROSAFRIKA\kigiri] ;
CREATE USER [NT SERVICE\SQLWriter] FOR LOGIN [NT SERVICE\SQLWriter] ;
CREATE USER [NT SERVICE\Winmgmt] FOR LOGIN [NT SERVICE\Winmgmt] ;
CREATE USER [NT Service\MSSQL$I2019] FOR LOGIN [NT Service\MSSQL$I2019] ;
CREATE USER [NT AUTHORITY\SYSTEM] FOR LOGIN [NT AUTHORITY\SYSTEM] ;
CREATE USER [NT SERVICE\SQLAgent$I2019] FOR LOGIN [NT SERVICE\SQLAgent$I2019] ;
CREATE USER [NT SERVICE\SQLTELEMETRY$I2019] FOR LOGIN [NT SERVICE\SQLTELEMETRY$I2019] ;
CREATE USER [KAIROSAFRIKA\sberko] FOR LOGIN [KAIROSAFRIKA\sberko] ;
GO

एक बार आउटपुट उत्पन्न होने के बाद, इसका उपयोग किसी भी वांछित डेटाबेस में उपयोगकर्ता बनाने के लिए किया जा सकता है जैसा कि लिस्टिंग 7 में दिखाया गया है। ध्यान दें कि हमने लॉगिन नामों के लिए एक फ़िल्टर जोड़ा है जिसमें हम रुचि रखते हैं। इस दृष्टिकोण का उपयोग सभी प्रकार के बयानों को उत्पन्न करने के लिए किया जा सकता है। और उसी सत्र के भीतर ऐसे बयानों को बुलाओ। एक अधिक जटिल उदाहरण निम्नलिखित कथन हैं जो किसी भी डेटाबेस में सभी अनुक्रमणिका को रचनात्मक रूप से पुनर्निर्माण करते हैं। (सूची 8 और 9 देखें)।

--Listing 8 Generating Index Rebuild Statements
USE EXAM
GO
CREATE TABLE #INDTAB (ID SMALLINT IDENTITY(1,1), REBUILDSTMT NVARCHAR(600))
INSERT INTO #INDTAB 
SELECT 'SET QUOTED_IDENTIFIER ON;
ALTER INDEX [' + B.NAME + '] 
ON [' + SCHEMA_NAME(C.SCHEMA_ID) + '].[' + OBJECT_NAME(A.OBJECT_ID) + '] 
REBUILD WITH (ONLINE = OFF
,FILLFACTOR=80
,SORT_IN_TEMPDB=ON
,PAD_INDEX = ON
, STATISTICS_NORECOMPUTE = OFF);'
--INTO #INDTAB
FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(), NULL,
     NULL, NULL, NULL) AS A
    JOIN SYS.INDEXES AS B 
	JOIN SYS.OBJECTS AS C
ON B.OBJECT_ID = C.OBJECT_ID
ON A.OBJECT_ID = B.OBJECT_ID AND A.INDEX_ID = B.INDEX_ID WHERE AVG_FRAGMENTATION_IN_PERCENT > 30 ;
SELECT * FROM #INDTAB;
GO
DROP TABLE #INDTAB;
GO

--Listing 9 Generating and Executing Index Rebuild Statements
USE EXAM
GO
CREATE TABLE #INDTAB (ID SMALLINT IDENTITY(1,1), REBUILDSTMT NVARCHAR(600))
INSERT INTO #INDTAB 
SELECT 'SET QUOTED_IDENTIFIER ON;
ALTER INDEX [' + B.NAME + '] 
ON [' + SCHEMA_NAME(C.SCHEMA_ID) + '].[' + OBJECT_NAME(A.OBJECT_ID) + '] 
REBUILD WITH (ONLINE = OFF
,FILLFACTOR=80
,SORT_IN_TEMPDB=ON
,PAD_INDEX = ON
, STATISTICS_NORECOMPUTE = OFF);'
--INTO #INDTAB
FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(), NULL,
     NULL, NULL, NULL) AS A
    JOIN SYS.INDEXES AS B 
	JOIN SYS.OBJECTS AS C
ON B.OBJECT_ID = C.OBJECT_ID
ON A.OBJECT_ID = B.OBJECT_ID AND A.INDEX_ID = B.INDEX_ID WHERE AVG_FRAGMENTATION_IN_PERCENT > 30 ;
GO
DECLARE @SQL NVARCHAR(4000);
SELECT @SQL= REBUILDSTMT FROM  #INDTAB ;
PRINT @SQL
EXEC SP_EXECUTESQL @SQL;
GO
DROP TABLE #INDTAB;
GO

लिस्टिंग 10 में क्वेरी से पता चलता है कि हम स्ट्रिंग्स को स्ट्रिंग्स में स्पष्ट रूप से परिवर्तित तिथियों के साथ कैसे जोड़ सकते हैं। स्ट्रिंग संयोजन एक सामान्य बैकअप पथ चर उत्पन्न करने के लिए उपयोग किया जाता है जिसे बाद में SP_MSFOREACHDB फ़ंक्शन के भीतर उपयोग किया जाता है।

--Listing 10 Generating a Common Backup Path
EXEC SP_MSFOREACHDB @COMMAND1='
DECLARE @BACKUP SYSNAME
SET @BACKUP=N''G:\BACKUP\?''+CONVERT(NVARCHAR,GETDATE(),112)+N''.BAK''
USE [?]
IF      ''?''  NOT   IN ("MODEL","TEMPDB")
BEGIN
BACKUP DATABASE ? TO  DISK = @BACKUP WITH  INIT ,  NOUNLOAD ,  COMPRESSION,
NAME = N''?'',  NOSKIP , NOFORMAT
END'

निष्कर्ष

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

संदर्भ

कास्ट और कन्वर्ट (ट्रांजैक्ट-एसक्यूएल)

कॉनकैट ट्रांजैक्ट-एसक्यूएल

Concat_ws ट्रांजैक्ट-एसक्यूएल

स्ट्रिंग संयोजन


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लिंक किए गए सर्वर के साथ छद्म कॉलम का उपयोग करना

  2. IAM नीति टेम्पलेट का उपयोग करके AWS पर स्केलग्रिड अनुमतियों को कॉन्फ़िगर करना

  3. डेटाबेस ट्रिगर पसंद नहीं है? आप बस यह नहीं जानते कि उनके साथ कैसे काम करना है!

  4. डेटाबेस में एक-से-अनेक संबंध क्या है? उदाहरणों के साथ एक स्पष्टीकरण

  5. अपने आवेदन में डेटाबेस कनेक्शन लीक खोजें