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

SQL:दूसरी तालिका के आधार पर एक कॉलम के हिस्से को कई पंक्तियों में बदलें

यहां एक सिंगल-स्टेटमेंट, नॉन-कर्सर विधि है जो सीटीई का उपयोग करती है:

WITH CTE(iteration, page_id, content) AS (
    SELECT
        0,
        P.page_id,
        REPLACE(P.content, M1.old_value, M1.new_value)
    FROM
        Pages P
    INNER JOIN Moving M1 ON
        P.content LIKE '%' + M1.old_value + '%'
    WHERE
        NOT EXISTS (SELECT * FROM Moving M2 WHERE P.content LIKE '%' + M2.old_value + '%' AND M2.moving_id < M1.moving_id)
    UNION ALL
    SELECT
        CTE.iteration + 1,
        CTE.page_id,
        REPLACE(CTE.content, M3.old_value, M3.new_value)
    FROM
        CTE
    INNER JOIN Moving M3 ON
        CTE.content LIKE '%' + M3.old_value + '%'
    WHERE
        NOT EXISTS (SELECT * FROM Moving M4 WHERE CTE.content LIKE '%' + M4.old_value + '%' AND M4.moving_id < M3.moving_id)
)
UPDATE P2
SET
    content = CTE1.content
FROM
    Pages P2
INNER JOIN CTE CTE1 ON
    CTE1.page_id = P2.page_id AND
    NOT EXISTS (SELECT * FROM CTE CTE2 WHERE page_id = P2.page_id AND CTE2.iteration > CTE1.iteration)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक विशिष्ट तालिका के बिना MSSQL डेटाबेस बैकअप

  2. जनवरी में किराए पर दिनों की संख्या गिनें

  3. SQL में एकाधिक मान चर घोषित करें

  4. कैसे बचें sp_OAसीमाएँ बनाएँ?

  5. SQL सर्वर में पहचान () बनाम पहचान ():क्या अंतर है?