SQL Serverには複数のバージョン(2016、2012)がありますが、残念ながら、STRING_ESCAPE
そのバージョンで導入されたため、2016年にのみ機能します。SQL Server 2012で同じクエリを実行しているときに、次のエラーが発生します。
SELECT STRING_ESCAPE(description, 'json')
FROM SomeTable
エラー:
メッセージ195、レベル15、状態10、行
1'STRING_ESCAPE 'は、認識された組み込み関数名ではありません。
STRING_ESCAPE
SQL Server 2012に代わるものはありますか?
直接組み込みの関数はありませんが、置き換える文字とそのエンコーディングを含むテーブルがある独自の関数を非常に簡単に作成できます。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]
コメントを追加