sql >> Database >  >> RDS >> Sqlserver

Hoe genereer ik (automatisch) een update-query van een dynamische query?

De oplossing van @rivarolle aanpassen

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

Dit werkt, je hebt alleen een functie nodig voor het opschonen van speciale XML-tekens en een andere voor het terugzetten, en de dynamische query's worden afgedrukt, klaar voor een update.



  1. Concat-veldwaarde naar tekenreeks in SQL Server

  2. Een MySQL SET maken van een string

  3. Wat is de gemakkelijkste manier om een ​​voorbeeld van gegevens uit een afbeeldingskolom te bekijken?

  4. Bijlagen in Oracle Applications R12