Sql server SQL Server 2012的字符串转义(';一些文本';,';json';)替代方案
我们有多个版本的SQL Server(2016、2012),不幸的是,Sql server SQL Server 2012的字符串转义(';一些文本';,';json';)替代方案,sql-server,sql-server-2012,sql-server-2016,Sql Server,Sql Server 2012,Sql Server 2016,我们有多个版本的SQL Server(2016、2012),不幸的是,STRING\u ESCAPE在2016年才开始工作,因为它是在该版本中引入的。在SQL Server 2012中执行同一查询时,出现以下错误 SELECT STRING_ESCAPE(description, 'json') FROM SomeTable 错误: 味精195,第15级,第10状态,第1行 “STRING_ESCAPE”不是可识别的内置函数名 对于SQL Server 2012,除了STRING\u ESC
STRING\u ESCAPE
在2016年才开始工作,因为它是在该版本中引入的。在SQL Server 2012中执行同一查询时,出现以下错误
SELECT STRING_ESCAPE(description, 'json')
FROM SomeTable
错误:
味精195,第15级,第10状态,第1行“STRING_ESCAPE”不是可识别的内置函数名
对于SQL Server 2012,除了
STRING\u ESCAPE
之外,还有其他方法吗?没有直接内置的函数,但您可以非常轻松地创建自己的函数,其中有一个包含要替换的字符及其编码的表。您甚至可以为json、xml等添加一列。然后,函数将获取要替换的数据,执行replace
并返回“已更改”字符串:
上面只是一个例子,您可能需要在上面的表中,然后在函数循环中,通过要替换的字符串,包括控制字符等,但至少这是一个开始
Niels看到微软如何决定实现JSON,而不是HTML和XML,依靠这个几乎毫无用处的函数感觉为时过早。
CREATE TABLE dbo.tb_StringEncoding
(
StringToReplace nvarchar(10),
StringReplacement nvarchar(10),
EncodingType nvarchar(25)
CONSTRAINT pk_StringEncoding PRIMARY KEY
(EncodingType, StringToReplace)
)
INSERT INTO dbo.tb_StringEncoding(StringToReplace, StringReplacement, EncodingType)
VALUES ( '"', '\"', 'json')
, ('\', '\\', 'json')
, ('/', '\/', 'json')
, ('{', '\{', 'json')
, ('}', '\}', 'json');
GO
CREATE FUNCTION dbo.fn_String_Escape(@StringToEscape nvarchar(max), @Encoding nvarchar(10))
RETURNS nvarchar(max)
BEGIN
DECLARE @s nvarchar(max);
SELECT @StringToEscape = REPLACE(@StringToEscape, StringToReplace, StringReplacement)
FROM dbo.tb_StringEncoding
WHERE EncodingType = @Encoding;
RETURN @StringToEscape
END
GO
-- an example how to use it:
DECLARE @description nvarchar(256) = 'Hello \ What are you / waiting for'
SELECT dbo.fn_String_Escape(@description, 'json')