2017-10-28 96 views
0

在我的基於Java的Web項目,我做了一個recursive查詢如下,它運行得很好,並返回列表idsSQL服務器查詢返回,但功能不

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); 

請幫助我,我做錯了什麼。

回答

1

我認爲你的問題是在你的函數查詢中使用了$1$2。只需使用表值函數中的原始參數名稱即可。

因此,在您的用戶定義函數中,用@empId替換$ 1並用@siteId替換$ 2。