Com o exemplo abaixo, como faço para escapar os caracteres de aspas duplas que estão na variável @data?
declare @data nvarchar(max) = N'"TEST"';
declare @jsonFragment nvarchar(max);
declare @id int = 999;
set @jsonFragment = ',"' + cast(@id as nvarchar(16)) + '":"' + @data + '"';
select @jsonFragment;
O resultado é:
,"999":""TEST""
Eu preciso que seja:
,"999":"\"TEST\""
Pelo que entendi, selecionar for json path
requer que eu defina um nome de chave estático - mas, como pode ser visto, tenho um cenário em que os nomes de chave estão sendo definidos dinamicamente.
No meu caso de uso do mundo real, essa construção de string está ocorrendo dentro de uma stuff
instrução, ela própria parte de uma definição de coluna maior select
que utiliza CTEs - o que significa que seria muito difícil criar uma instrução sql dinâmica para ser executada usando sp_executeSQL
.
Existe uma função do sistema para esta finalidade chamada STRING_ESCAPE que irá escapar os caracteres conforme necessário para um determinado tipo de string.
No seu exemplo:
Devoluções:
Ele funciona com todos os elementos que precisam ser escapados, como barras em um nome de caminho, por exemplo:
Devoluções