SQL Server 2012のSTRING_ESCAPE( 'SOME TEXT'、 'json')代替

Chirag Visavadiya

SQL Serverには複数のバージョン(2016、2012)がありますが、残念ながら、STRING_ESCAPEそのバージョンで導入されたため、2016年にのみ機能します。SQL Server 2012で同じクエリを実行しているときに、次のエラーが発生します。

SELECT STRING_ESCAPE(description, 'json') 
FROM SomeTable

エラー:

メッセージ195、レベル15、状態10、行
1'STRING_ESCAPE 'は、認識された組み込み関数名ではありません。

STRING_ESCAPESQL Server 2012に代わるものはありますか?

Niels Berglund

直接組み込みの関数はありませんが、置き換える文字とそのエンコーディングを含むテーブルがある独自の関数を非常に簡単に作成できます。json、xmlなどの列を追加することもできます。次に、関数はデータを取得して置換し、aREPLACE実行して、「変更された」文字列を返します。

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

上記は単なる例です。おそらく、上記のテーブルに制御文字などを含めてから、文字列を介して関数ループに置き換えて置き換える必要がありますが、少なくともこれは始まりです。

ニールズ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事