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

SQL एक अन्य varchar चर के साथ varchar चर की तुलना करें

1) मध्यम या लंबी अवधि में मैं ऐसी गलतियों से बचने के लिए इस डेटाबेस को सामान्य बनाना चाहता हूं:स्ट्रिंग/VARCHAR कॉलम के भीतर मानों की सूची संग्रहीत करना। उदाहरण के लिए, मैं निम्नलिखित कई से कई तालिका का उपयोग करूंगा:

CREATE TABLE dbo.BillItem (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    BilldID INT NOT NOT NULL REFERENCES dbo.Bill(BilldID),
    ItemID INT NOT NULL REFERENCES dbo.Item(ItemID),
    UNIQUE (BillID, ItemID) -- Unique constraint created in order to prevent duplicated rows
);

इस मामले में, दो आइटम वाले एक बिल का मतलब है कि मुझे dbo.BillItem में दो पंक्तियां डालनी होंगी टेबल।

2) मूल अनुरोध पर वापस:एक बार के कार्य के लिए मैं इस प्रकार XML और XQuery का उपयोग करूंगा (यह समाधान एक चयन कथन के साथ समाप्त होता है लेकिन अद्यतन में परिवर्तित करने के लिए यह छोटा है):

DECLARE @iCountRef VARCHAR(100) = '1,2,3'

DECLARE @SourceTable TABLE (
    BillId          INT,
    LineReference   VARCHAR(8000)
)

INSERT @SourceTable (BillId, LineReference)
VALUES
(100, '1,2,'),
(100, '1,2,40,34'),
(100, '1'),
(100, '12')

DECLARE @iCountRefAsXML XML = CONVERT(XML, '<a><b>' + REPLACE(@iCountRef, ',', '</b><b>') + '</b></a>')

SELECT  *, STUFF(z.LineReferenceAsXML.query('
    for $i in (x/y)
        for $j in (a/b)
            where data(($i/text())[1]) eq data(($j/text())[1])
        return concat(",", ($i/text())[1])
').value('.', 'VARCHAR(8000)'), 1, 1, '') AS NewLineReference
FROM (
    SELECT  *, CONVERT(XML, 
        '<x><y>' + REPLACE(LineReference, ',', '</y><y>') + '</y></x>' + 
        '<a><b>' + REPLACE(@iCountRef, ',', '</b><b>') + '</b></a>'
    ) AS LineReferenceAsXML
    FROM    @SourceTable s
) z

परिणाम:

BillId      LineReference  NewLineReference LineReferenceAsXML                                                      
----------- -------------  ---------------- ------------------------------------------------------------------------
100         1,2,           1 ,2             <x><y>1</y><y>2</y><y /></x><a><b>1</b><b>2</b><b>3</b></a>             
100         1,2,40,34      1 ,2             <x><y>1</y><y>2</y><y>40</y><y>34</y></x><a><b>1</b><b>2</b><b>3</b></a>
100         1              1                <x><y>1</y></x><a><b>1</b><b>2</b><b>3</b></a>                          
100         12             (null)           <x><y>12</y></x><a><b>1</b><b>2</b><b>3</b></a>                         


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस मेल लॉग इन SQL सर्वर (T-SQL) से ईवेंट हटाएं

  2. मैं टी-एसक्यूएल में प्रतिशत चिह्न से कैसे बचूं?

  3. क्या एक चर को एक बार में जारी रखने का कोई तरीका है?

  4. एसएसआईएस पैकेज का उपयोग कर डेटाबेस में एक्सएमएल फाइल कैसे लोड करें?

  5. SQL सर्वर 2017 में संबंध बनाएं