【问题标题】:SQL server query returns but function does notSQL Server 查询返回但函数不返回
【发布时间】:2018-04-09 21:43:40
【问题描述】:

在我基于Java 的网络项目中,我做了一个recursive 查询,如下所示,它运行得非常好并返回ids 列表。

WITH treeResult(id) AS 
    (SELECT pt.id FROM myschema.art_artwork_tree AS pt WHERE pt.id in 
      (select node_id from myschema.art_brand_user_mapping where emp_id = $1)
     UNION ALL 
     SELECT pa.id FROM treeResult AS p, myschema.art_artwork_tree AS pa 
     WHERE pa.parent_node = p.id and pa.site_id = $2) SELECT id FROM treeResult AS n
    );

现在,我想在JPQL 查询中使用它。所以,我做了如下function

USE [darshandb]
GO

DROP FUNCTION [dbo].[testfunction]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

    CREATE FUNCTION [dbo].[testfunction] (@empId INT,@siteId INT)
     RETURNS TABLE
     WITH SCHEMABINDING
     AS
     RETURN
     (
      WITH treeResult(id) AS 
        (SELECT pt.id FROM myschema.art_artwork_tree AS pt WHERE pt.id in 
          (select node_id from myschema.art_brand_user_mapping where emp_id = $1)
         UNION ALL 
         SELECT pa.id FROM treeResult AS p, myschema.art_artwork_tree AS pa 
         WHERE pa.parent_node = p.id and pa.site_id = $2) SELECT id FROM treeResult AS n
    );
GO

当我尝试执行function 时,它没有返回任何值。

SELECT * FROM [dbo].[testfunction] (4,3);

请帮帮我,我做错了什么。

【问题讨论】:

    标签: java sql sql-server hibernate jpa


    【解决方案1】:

    我认为您的问题是在您的函数查询中使用了$1$2。只需在表值函数中使用原始参数名称即可。

    因此,在您的用户定义函数中将 $1 替换为 @empId 并将 $2 替换为 @siteId。

    【讨论】:

      猜你喜欢
      • 2021-03-13
      • 1970-01-01
      • 2011-01-17
      • 2017-10-17
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多