2016-06-20 74 views
-2

SP1

ALTER procedure [dbo].[sp1]    
as    
begin       
DECLARE @od varchar(255) 
EXEC @od =dbo.getFn 

SELECT CMSA.A,CMSB.B, @OD 
FROM CMSA INNER JOIN CMSB 
GROUP BY CMSA.A, CMSB.B 
end 

FN1

ALTER FUNCTION [dbo].[getFn]() 
returns varchar(255) 
as 
BEGIN 
DECLARE @Desc1 varchar(200) 
DECLARE @Desc2 varchar(200) 
DECLARE c1 CURSOR FOR 
SELECT CMSC.C 
FROM CMSC INNER JOIN CMSB INNER JOIN CMSC 
WHERE CMSC.C = "HELLO" OR CMSC.C = "GOODBYE" 
GROUP BY CMSC.C 
Open c1 
FETCH NEXT FROM c1 INTO @Desc1 
set @[email protected] 
CLOSE c1 
deallocate c1 
Return @Desc2 
end 

只說了CMSC現有值是HELLO和GOODBYE了,我想同時顯示值從函數存儲過程。例如,從功能在存儲過程返回多個值 - SQL服務器

CMSA.A, CMSB.B, HELLO 
CMSA.A, CMSB.B, GOODBYE 

但現在,我只能夠顯示一個輸出,而不是如上所述的兩個輸出。我該如何解決這個問題?

+2

代碼中引用無厘頭一個CROSS JOIN。如果你想從用戶定義函數返回多個值,它應該返回一個表。 –

+0

此外,你的代碼會給你編譯錯誤 – tungula

+0

然後,我應該如何返回多個值呢?不,該代碼不會給我任何編譯錯誤。它只返回一個值 –

回答

0

功能

的功能似乎錯誤的內連接沒有ON語句。

ALTER FUNCTION [dbo].[getFn]() 
returns @table TABLE (value varchar(255)) 
as 
BEGIN 
    DECLARE @Desc1 varchar(200) 
    DECLARE @Desc2 varchar(200) 

    DECLARE c1 CURSOR FOR 

    SELECT CMSC.C 
    FROM CMSC 
    INNER JOIN CMSB 
    INNER JOIN CMSC 
    WHERE CMSC.C = "HELLO" OR CMSC.C = "GOODBYE" 
    GROUP BY CMSC.C 

    Open c1 
    FETCH NEXT FROM c1 INTO @Desc1 
    set @[email protected] 
    INSERT INTO @table VALUES (@Desc2) 
    CLOSE c1 
    deallocate c1 

    Return 
end 

SP

同樣,SP的語法也是錯誤的,因爲在ON語句中缺少INNER JOIN。

ALTER procedure [dbo].[sp1]    
as    
begin       
DECLARE @od varchar(255) 
EXEC @od =dbo.getFn 

SELECT CMSA.A,CMSB.B, a.Value 
FROM CMSA INNER JOIN CMSB 
INNER JOIN (SELECT * FROM dbo.getFn()) a 
GROUP BY CMSA.A, CMSB.B 
end 

這可能是一個INNER JOIN或取決於是否有一個字段上

+0

在我的函數中,它返回無法對'dbo.getFn'執行更改,因爲它是不兼容的對象類型。 –

+0

你使用的是MS SQL還是MySQL? – Sam

+0

SQL SERVER,nvm我解決了錯誤,並且我有一個更多的錯誤,它是(SELECT * FROM dbo.getFn())查詢之後的「在預期條件的上下文中指定的非布爾類型的表達式」 –