2017-06-09 10 views
1

私は動的なjsonパスでクエリに必要です、それは可能ですか?SQL Serverで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('[email protected]+', '[email protected]+')' 

    EXEC @kek2 = @result 

    INSERT INTO @newTable 
     SELECT @kek2 

    RETURN 
END 

私はこの関数を呼び出すと、私はこのエラーメッセージを取得:

メッセージ203、レベル16、状態2、ライン2
名「SELECT JSON_VALUEを({ "GlossDiv":{"タイトル": "S"、 "GlossList":{"GlossEntry":{"ID": "SGML"、 "SortAs": "用語集" "SGML"、 "GlossTerm": "標準化されたマークアップ言語" "略語:" "SGML"、 "略語": "ISO 8879:1986"、 "GlossDef":{"para": "メタマークアップLAN DocBookなどのマークアップ言語の作成に使用されています。 "、" GlossSeeAlso ":[" GML "、" XML "]}、" GlossSee ":"マークアップ "}}} } 、$ .glossary.title)"有効な識別子ではありません。

私は、次のコードを使用していないすべて大丈夫、それは私が必要であることをしないなら - 動的なJSONのURLを

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ええと、そういうものを使っているとうまくいきます: JSON_VALUE( '+ @ kek +'、N '$ glossary.title') ' しかし、それは動的ではありません – FancyFries

+0

私はそれを得たと思います。パスの周りに一重引用符はありません。あなたのSETにそれらを含めると、それがそれを修正するかどうかを確認してください。 '...}、$ .glossary.title)'は '...} '、' $ .glossary.title ')' –

答えて

0

あなたのクエリであなたの内部の単一引用符のすべてを3倍にする必要があります、このように:

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

JSON文字列やJSONのURLの両方がJSON_VALUE関数に渡される文字列として処理する必要があります。

+0

いいえ、これも機能しません。エラーメッセージは同じです... – FancyFries

関連する問題