Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2012的字符串转义(';一些文本';,';json';)替代方案_Sql Server_Sql Server 2012_Sql Server 2016 - Fatal编程技术网

Sql server SQL Server 2012的字符串转义(';一些文本';,';json';)替代方案

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

我们有多个版本的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 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')