you*_*gme 5 t-sql json sql-server-2016
在下面的示例中,如何转义 @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;
Run Code Online (Sandbox Code Playgroud)
结果是:
,"999":""TEST""
Run Code Online (Sandbox Code Playgroud)
我需要它是:
,"999":"\"TEST\""
Run Code Online (Sandbox Code Playgroud)
据我了解,选择for json path
要求我定义一个静态键名称 - 但可以看出,我有一个场景,其中键名称是动态定义的。
在我的实际用例中,此字符串构造发生在一个stuff
语句内,该语句本身是利用 CTE 的较大列定义的一部分select
- 这意味着很难创建要使用sp_executeSQL
.
有一个用于此目的的系统函数,称为STRING_ESCAPE,它将根据给定字符串类型的需要转义字符。
在你的例子中:
declare @data nvarchar(max) = N'"TEST"';
declare @jsonFragment nvarchar(max);
declare @id int = 999;
set @jsonFragment = ',"' + cast(@id as nvarchar(16)) + '":"' + STRING_ESCAPE(@data, 'json') + '"';
select @jsonFragment;
Run Code Online (Sandbox Code Playgroud)
返回:
,"999":"\"TEST\""
Run Code Online (Sandbox Code Playgroud)
它适用于所有需要转义的元素,例如路径名中的斜杠,例如:
SELECT STRING_ESCAPE(N'C:\PathName\Temp\', 'json')
Run Code Online (Sandbox Code Playgroud)
退货
C:\\PathName\\Temp\\
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8174 次 |
最近记录: |