SQL Server 2012的STRING_ESCAPE(' SOME TEXT' json')替代方案

时间:2018-01-18 00:04:54

标签: sql-server sql-server-2012 sql-server-2016

我们有多个版本的SQL Server(2016年,2012年),不幸的是,STRING_ESCAPE仅在2016年工作,因为它是在该版本中引入的。我在SQL Server 2012中执行相同的查询时遇到以下错误。

SELECT STRING_ESCAPE(description, 'json') 
FROM SomeTable

错误:

  

Msg 195,Level 15,State 10,Line 1   ' STRING_ESCAPE'不是公认的内置函数名称。

对于SQL Server 2012,是否有STRING_ESCAPE的替代方法?

1 个答案:

答案 0 :(得分:2)

没有直接内置函数,但您可以非常轻松地创建自己的函数,其中包含要替换的字符及其编码的表。您甚至可以为json,xml等添加一列。然后该函数将数据替换,执行REPLACE并返回“已更改”字符串:

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')

以上只是一个例子,您可能必须在上面的表中包含控制字符等,然后在函数循环中通过要替换的字符串 - 但至少这是一个开始。

尼尔斯