Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Scal wiele kolumn w jedną, zachowując podobieństwa i zastępując różnice

tutaj jest lepsze rozwiązanie, prostsze, z drobnymi potencjalnymi incydentami i szybsze, zostało dostarczone przez @Alexander Fedorenko, właśnie dostosowałem się do tego pytania:

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

Warunki zapętlenia dynamicznej konstrukcji zapytań z 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. Nieprawidłowa nazwa kolumny SQL Server po dodaniu nowej kolumny

  2. 🆕 Pierwsze spojrzenie na SQL Server 2022 — 5 najlepszych nowych funkcji (dodatkowe 5 funkcji)

  3. Maszyny wirtualne platformy Azure do użycia w programie SQL Server

  4. AKTUALIZUJ + Z (ROWLOCK) + CTE

  5. Instalacja klastra pracy awaryjnej serwera SQL -1