2016-06-20 7 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ある、と私は両方の値を表示したいと言います関数からのストアドプロシージャ。たとえば、上記のように出力の代わりに1つの出力のみを表示することができます。これをどうすれば解決できますか?インナーはON文を持っていないジョインとして戻り複数の値 - SQL Serverの

+2

に参照するためのフィールドを持っているかどうかに応じて、JOIN INNERかもしれません。ユーザ定義関数から複数の値を返す場合は、テーブルを返す必要があります。 –

+0

また、コードでコンパイルエラー – tungula

+0

が表示されます。次に、代わりに複数の値を返す必要がありますか? いいえ、コードは私にコンパイルエラーを与えません。単一の値のみを返します –

答えて

0

機能

機能が誤っているようです。 ON文はINNER JOINをに欠けているよう

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の構文も間違っています。

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 

それはJOINまたはCROSSあなたはあなたのコードは意味がありません

+0

私の関数では、互換性のないオブジェクト型であるため、 'dbo.getFn'に対しては変更できません。 –

+0

MS SQLまたはMySQLを使用していますか? – Sam

+0

SQL SERVER、nvm私はエラーを解決しました。クエリ(SELECT * FROM dbo.getFn())の直後に "条件が期待されるコンテキストで指定された非ブール型の式"というエラーが1つあります。 –

関連する問題