2017-06-09 86 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

相關問題