sql >> Databasteknik >  >> RDS >> Sqlserver

Hur genererar man en uppdateringsfråga för en dynamisk fråga (automatiskt)?

Anpassar lösningen från @rivarolle

DECLARE @QUERY VARCHAR(MAX)
DECLARE @FORMATTED varchar(max)

SELECT @QUERY='SELECT * FROM QUERIES WHERE QUE_NOMBRE='''+'PRUEBA 1'+''''

;WITH TOKENS AS(
SELECT 
      t.r.value('.', 'varchar(MAX)') AS token
      , ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS Id 
FROM (
        SELECT myxml = CAST('<t>' + REPLACE(@QUERY, '''', '</t><t>''</t><t>') + '</t>' AS XML)
            ) p
            CROSS APPLY myxml.nodes('/t') t(r)
    ) 
    ,

Tokens2 as (
        SELECT 
        TOKENS.token as token
        ,quotes.row%2 as tipoapostrofe
from Tokens 
left join (select row_number() over( order by Id asc) as row, a.* FROM (SELECT * from Tokens) a where Token = '''') quotes 
    on quotes.Id = Tokens.Id
)

SELECT @FORMATTED = STUFF((
    SELECT ' ' + REPLACE(token,'''',CASE tipoapostrofe WHEN 1 THEN '''''''+''' WHEN 0 THEN '''+''''''' ELSE '' END) AS [text()]
    FROM Tokens2
FOR XML PATH('')
    ), 1, 1, '')
print @FORMATTED

Detta fungerar, behöver bara en funktion för att rensa XML-specialtecken och en annan för att lägga tillbaka, och de dynamiska frågorna skrivs ut redo för uppdatering.



  1. Applikationskod Redesign för att reducera antal. av databasträffar från prestationsperspektiv

  2. Ska jag använda en JOIN-funktion eller köra flera frågor i en loopstruktur?

  3. Hur man stänger av MySQL strikt läge i Rails

  4. JPA infoga förälder/underordnade resultat i MySQLIintegrityConstraintViolationException