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

कई स्तंभों को एक में मिलाएँ, समानता बनाए रखें और अंतरों को बदलें

यहाँ एक बेहतर समाधान है, अधिक सरल, मामूली संभावित घटनाओं के साथ, और तेज़, @Alexander Fedorenko द्वारा प्रदान किया गया था, मैंने अभी इस प्रश्न के लिए अनुकूलित किया है:

DECLARE @xml XML = '<ROOT>
  <PARAMETROS>
    <USU_LOGIN>yleon</USU_LOGIN>
    <USU_NOMBREPRIMERO>Yerusha</USU_NOMBREPRIMERO>
    <USU_APELLIDOPRIMERO>Leon</USU_APELLIDOPRIMERO>
    <USU_EMAIL>[email protected]</USU_EMAIL>
    <USU_FECHACREACION>20130510</USU_FECHACREACION>
    <USU_CODICIONES1 TIPO="MC" MARCADOR="CONDICIONES1">AND USU_ID=1</USU_CODICIONES1>
    <USU_CODICIONES2 TIPO="MC" MARCADOR="CONDICIONES2">OR USU_ID=2</USU_CODICIONES2>
    <USU_CODICIONES3 TIPO="MC" MARCADOR="CONDICIONES3">OR USU_ID=3</USU_CODICIONES3>
    <USU_CODICIONES4 TIPO="MC" MARCADOR="CONDICIONES4">OR USU_ID=4</USU_CODICIONES4>
    <USU_CODICIONES5 TIPO="MC" MARCADOR="CONDICIONES5">OR USU_ID=5</USU_CODICIONES5>
    <USU_CODICIONES6 TIPO="MC" MARCADOR="CONDICIONES6">OR USU_ID=6</USU_CODICIONES6>        
  </PARAMETROS>
</ROOT>'

DECLARE @QUERY NVARCHAR(MAX)

SET @QUERY = 'SELECT * FROM USUARIOS WHERE 1=1 CONDICIONES1 CONDICIONES2 CONDICIONES3 CONDICIONES4 CONDICIONES5 CONDICIONES6'             

  DECLARE  @dsql nvarchar(max)

  SELECT @dsql = REPLACE(COALESCE(@dsql, @QUERY), 
                         T.Item.value('@MARCADOR', 'varchar(255)'),
                         T.Item.value('data(.)', 'varchar(255)'))         
  FROM   @xml.nodes('/ROOT/PARAMETROS/*') AS T(Item)  
  WHERE T.Item.value('data(@TIPO)', 'varchar(255)')='MC'

PRINT @DSQL

एक xml से डायनामिक क्वेरी कंस्ट्रक्शन लूपिंग कंडीशंस



  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 सर्वर वर्चर को डेटाटाइम में कनवर्ट करें

  2. एक टीएसक्यूएल 2008 संग्रहीत प्रक्रिया में एक सूची पास करना

  3. एसक्यूएल सर्वर 2008 का उपयोग कर विभिन्न डेटाबेस में दो टेबल के बीच डेटा की तुलना कैसे करें?

  4. डेटाबेस + विंडोज प्रमाणीकरण + उपयोगकर्ता नाम/पासवर्ड?

  5. एसक्यूएल सर्वर 2008 में स्केलर फ़ंक्शन कैसे बनाएं और कॉल करें?