sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan genererer man en opdateringsforespørgsel af en dynamisk forespørgsel (automatisk)?

Tilpasning af løsningen givet af @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

Dette virker, du skal bare bruge en funktion til at rense XML-specialtegn og en anden til at sætte tilbage, og de dynamiske forespørgsler udskrives klar til en opdatering.



  1. Sådan opretter du sammensat primær nøgle i SQL Server 2008

  2. MYSQL - tyrkisk karakter

  3. Sådan ændres prioritet for samtidig program

  4. Mysql-forespørgsel, som returnerer kategoritræ