当前位置: 首页 > 知识库问答 >
问题:

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

隗轶
2023-03-14

我需要在查询中输入动态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行
Name“SELECT JSON_VALUE”({“glossary”):{“title”:“example glossary”,“GlossDiv”:{“title”:“S”,“GlossList”:{“GlossEntry”:{“ID”:“SGML”,“SortAs”:“SGML”,“GlossTerm”:“标准通用标记语言”缩写:“SGML”,“Abbrev”:“ISO 8879:1986”,“GlossDef”:{“para”:”一种元标记语言,用于创建标记语言,如DocBook。“,”glossee也“:[“GML”,“XML”]},“glossee:“markup”}}},$.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

共有2个答案

贝成业
2023-03-14

我可以用下面的方法解决它。Json使用

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

SQL的观点

DECLARE @cantRemuneraciones INT;
DECLARE @cant INT = 0;
DECLARE @ruta NVARCHAR(MAX);
DECLARE @Parametros NVARCHAR(MAX);

SET @cantRemuneraciones = JSON_VALUE(@cTrama,'$.cantRemuneraciones');

WHILE @cant < @cantRemuneraciones
BEGIN

    SET @ruta = 'SELECT JSON_VALUE(@cTrama,REPLACE(''$.listaRemuneraciones[0].nPerConRemElemento'',''0'','+ CONVERT(VARCHAR(2),@cant) +'));';

    SET @Parametros = N'@cTrama NVARCHAR(MAX)';
    EXEC sp_executesql @ruta, @Parametros, @cTrama

    SET @cant = @cant +1;

END;

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

朱锐
2023-03-14

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

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

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

 类似资料:
  • 在SpringMVC中是否可以将默认值设置为@PathVariable? 在这种情况下。如果我访问没有pageNumber的页面,我希望将默认值设置为1。

  • 问题内容: 可以说我有一些状态依赖于其他状态(例如,当A更改时,我希望B更改)。 创建一个观察A并将B设置在useEffect钩内的钩子是否合适? 效果是否会级联,从而在我单击按钮时会触发下一个效果,从而导致b发生变化,从而导致第二个效果在下一次渲染之前触发?这样构造代码是否有性能下降? 问题答案: 效果始终在渲染阶段完成后执行,即使您将setState放在一个效果中,另一个效果也将读取更新后的状

  • 问题内容: 我在Tomcat上有一个Web应用程序,该应用程序处理数据库连接池,并使用Spring JDBCTemplate执行查询。有人要求我实现一个状态页面,该页面将由心跳过程进行监视,以确定服务器是否一切正常。 作为此操作的一部分,我想执行一个数据库查询以确定与数据库的连接是否正常。理想情况下,由于它只是“从中选择1”,因此我希望它能在10秒内快速返回,以指示如果DB在那段时间内没有响应,则

  • 本文向大家介绍vue动态设置img的src路径实例,包括了vue动态设置img的src路径实例的使用技巧和注意事项,需要的朋友参考一下 相信开发的小伙伴已经遇到这个问题了,动态切换img标签的src时,写的路径就是不生效,原因是vue并没有把你的路径字符串当做路径来处理,而是直接当做字符串了,当然网上也有很多方法,这里使用的是最有效的方法。 看代码: 使用导入资源的方式 这样就可以非常有效的,动态

  • 假设我有这个流行的数据样本。 我想从这里得到的是一本所有的<代码>书,其中<代码>类别==小说和所有的<代码>自行车,其中<代码>颜色==红色。 也就是说,我想要, 我知道,我可以用实现有针对性的书籍和

  • 问题内容: 我已经在互联网上进行了一些研究,但没有设法获得有关该主题的完整图片。任何人都可以暂时解决这个问题吗? 这是我到目前为止发现的: 可以使用jsonp进行跨域调用。禁止在jsonp调用中更改标头 如果服务器允许,则可以使用json进行跨域调用。 这就是我想要做的: 这是正在发生的事情: 当myJSonServer在同一域上时,完全没有问题 当myJSonServer在另一个域上时,将发送请