我在查询中需要动态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
答案 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