2017-06-09 64 views
1

我需要在查询中的动态json路径,这有可能吗?我可以使用json在SQL Server查询中设置动态路径吗?

我尝试:

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('[email protected]+', '[email protected]+')' 

    EXEC @kek2 = @result 

    INSERT INTO @newTable 
     SELECT @kek2 

    RETURN 
END 

当我把这个功能我收到此错误信息:

消息203,16级别,状态2,行2
名称“SELECT JSON_VALUE({ “Glossary”:{“title”:“example词汇表”, “GlossDiv”:{“title”:“S”,“GlossList”:{“GlossEntry”:{“ID”:“SGML”,“SortAs” “SGML”,“GlossTerm”:“标准通用标记语言”“缩写”:“SGML”,“缩写”:“ISO 8879:1986”,“GlossDef”:{“para”:“用于创建标记语言,如DocBook。“,”GlossSeeAlso“:[”GML“,”XML“]},”GlossSee“:”标记“}}}} } ,$ .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 
+0

您确定JSON有效吗? –

+0

@JacobH是的,它的工作,如果我用类似的东西:(“ $ glossary.title”“+ @ + KEK”,N) SELECT JSON_VALUE” 但它不动 – FancyFries

+0

我想我得到了它。现在你的路径上没有单引号。将它们包含在你的SET中,看看是否修复它。 '...},$ .glossary.title)'应该是'...},'$ .glossary.title')' –

回答

0

你需要三倍的所有内部单引号中查询,像这样:

SET @result = 'SELECT JSON_VALUE('''[email protected]+''', '''[email protected]+''')' 

无论是JSON字符串和JSON URL需要被视为字符串传递给JSON_VALUE功能。

+0

不,这不起作用。错误消息是相同的... – FancyFries

相关问题