@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('' + REPLACE(@QUERY, '''', ' '' ') + ' ' AS XML) ) p CROSS APPLY myxml.nodes('/t') t(r ) ) ,Tokens2 as ( SELECT TOKENS.token as token ,quotes.row%2 as tipoapostrofefrom Tokens left join (select row_number() over( Id asc による順序) as row, a.* FROM (SELECT * from Tokens) a where Token ='''') quotes.Id =Tokens.Id)SELECT @FORMATTED =STUFF(( SELECT ' ' + REPLACE(トークン,'''',CASE Tipoapostrofe WHEN 1 THEN '''''''+ ''' WHEN 0 THEN '''+''''''' ELSE '' END) AS [text()] FROM Tokens2FOR XML PATH('') ), 1, 1, '')print @FORMATTEDコード> プレ>
これは機能し、XML 特殊文字を消去する関数と元に戻す関数が必要なだけで、動的クエリは更新の準備ができて出力されます。