解析JSON的sql函數腳本文件下載地址:https://files.cnblogs.com/files/YoungHeart/parseJSON.rar
使用場景:1,接口輸入比較復雜時可使用json傳輸,相比逗號隔開數據值的意義更明確,避免輸入參數過多,這個只需要一個json字符串參數。
2,在一下配置場景可使用json存儲,使用時再解析。不適合作為查詢條件。
使用方法
DECLARE @parent_ID INT , @Object_ID INT; DECLARE @index INT , @rate_start FLOAT , @rate_end FLOAT , @diffId INT; --自己需要的json結果 CREATE TABLE #temp_question_recommend_diff_config ( [index] INT , rate_start FLOAT , rate_end FLOAT , diffId INT ); SELECT * INTO #temp_question_recommend_diff_config_json FROM Xxyx_System.dbo.parseJSON('[{"index":0,"rate_start":100.00,"rate_end":80.00,"diffId":-1},{"index":1,"rate_start":80.00,"rate_end":70.00,"diffId":-1},{"index":2,"rate_start":70.00,"rate_end":60.00,"diffId":-1},{"index":3,"rate_start":60.00,"rate_end":0.00,"diffId":-1}]'); SELECT @parent_ID = Object_ID FROM #temp_question_recommend_diff_config_json WHERE ValueType = 'array'; --解析json WHILE ( EXISTS ( SELECT 1 FROM #temp_question_recommend_diff_config_json WHERE parent_ID = @parent_ID ) ) BEGIN SELECT TOP 1 @Object_ID = Object_ID FROM #temp_question_recommend_diff_config_json WHERE parent_ID = @parent_ID; SELECT @index = StringValue FROM #temp_question_recommend_diff_config_json WHERE parent_ID = @Object_ID AND NAME = 'index'; SELECT @rate_start = StringValue FROM #temp_question_recommend_diff_config_json WHERE parent_ID = @Object_ID AND NAME = 'rate_start'; SELECT @rate_end = StringValue FROM #temp_question_recommend_diff_config_json WHERE parent_ID = @Object_ID AND NAME = 'rate_end'; SELECT @diffId = StringValue FROM #temp_question_recommend_diff_config_json WHERE parent_ID = @Object_ID AND NAME = 'diffId'; INSERT INTO #temp_question_recommend_diff_config ( [index] , rate_start , rate_end , diffId ) VALUES ( @index , -- index - int @rate_start , -- rate_start - float @rate_end , -- rate_end - float @diffId -- diffId - int ); DELETE #temp_question_recommend_diff_config_json WHERE Object_ID = @Object_ID; END; --解析后的json結構 SELECT * FROM #temp_question_recommend_diff_config_json; --最終自己需要的數據 SELECT * FROM #temp_question_recommend_diff_config; DROP TABLE #temp_question_recommend_diff_config; DROP TABLE #temp_question_recommend_diff_config_json;
JSON解析結果:
重組后的數據結果: