我们有多个版本的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
的替代方法?
答案 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')
以上只是一个例子,您可能必须在上面的表中包含控制字符等,然后在函数循环中通过要替换的字符串 - 但至少这是一个开始。
尼尔斯