我可以使用json在SQL Server中的查询中设置动态路径吗?

时间:2017-06-09 20:38:43

标签: sql-server json

我在查询中需要动态json路径,是否可能?

我的尝试:

CREATE FUNCTION [dbo].[GetValue]()
RETURNS @newTable TABLE (ColumnValue NVARCHAR(MAX))
AS
BEGIN
    DECLARE @jsonURL NVARCHAR(MAX)
    DECLARE @kek NVARCHAR(MAX)
    DECLARE @kek2 NVARCHAR(MAX)
    DECLARE @result NVARCHAR(MAX)

    SET @jsonURL =  N'$.glossary.title'

    SELECT @kek = JSONValue 
    FROM [dbo].[jsobj]

    SET @result = 'SELECT JSON_VALUE('+@kek+', '+@jsonURL+')'

    EXEC @kek2 = @result

    INSERT INTO @newTable 
        SELECT @kek2

    RETURN
END

当我调用此函数时,我收到此错误消息:

  

消息203,级别16,状态2,行2   名称“SELECT JSON_VALUE({”词汇表“:{”title“:”示例词汇表“,   “GlossDiv”:{“title”:“S”,“GlossList”:{“GlossEntry”:{“ID”:“SGML”,“SortAs”:“SGML”,“GlossTerm”:“标准通用标记语言”“首字母缩略词“:”SGML“,”Abbrev“:”ISO 8879:1986“,”GlossDef“:{”para“:”元标记语言,用于创建DocBook等标记语言。“,”GlossSeeAlso“:[ “GML”,“XML”]},“GlossSee”:“markup”}}}}   }   ,$ .glossary.title)“不是有效的标识符。

如果我使用下一个代码,一切都没问题,但这不是我需要的 - 没有动态JSON网址

CREATE FUNCTION [dbo].[GetValue]()
RETURNS @newTable TABLE
(ColumnValue NVARCHAR(MAX))
AS
BEGIN
    DECLARE @jsonURL NVARCHAR(MAX)
    DECLARE @kek NVARCHAR(MAX)
    DECLARE @kek2 NVARCHAR(MAX)
    DECLARE @result NVARCHAR(MAX)

    SET @jsonURL =  N'$.glossary.title'

    SELECT @kek = JSONValue FROM [dbo].[jsobj]

    SELECT @kek2 = JSON_VALUE(@kek, N'$.glossary.title')


    INSERT INTO @newTable 
        SELECT @kek2

    RETURN
END

2 个答案:

答案 0 :(得分:0)

您需要在查询中将所有内部单引号加倍,例如:

 SET @result = 'SELECT JSON_VALUE('''+@kek+''', '''+@jsonURL+''')'

JSON字符串和JSON url都需要被视为要传递给JSON_VALUE函数的字符串。

答案 1 :(得分:0)

我可以通过以下方式解决它。杰森使用

android:layout_width="wrap_content"

SQL视图

SET @cTrama = '{"cPerJurCodigo":"1000000002","listaRemuneraciones":[{"nPerConRemElemento":1,"nPerConRemMonto":2600.0},{"nPerConRemElemento":2,"nPerConRemMonto":1300.0}],"cantRemuneraciones":2}'

有了它,我得到了动态的JSON_VALUE