2016-09-08 8 views
-1

以下の構文を修正するには、別のCASEで評価される変数に値を返す関数を含む入れ子の場合が必要です。Sqlスカラー値関数入れ子の場合

CREATE FUNCTION dbo.EpsClassificacaoConjunto (@Bloco varchar(5), @Sub varchar(5), @SSub varchar(5)) 
RETURNS varchar(5) 
    AS 
    BEGIN 
    DECLARE @Comprimento float = CASE WHEN @Sub is null AND @SSub not null then SELECT dbo.EpsComprimentoSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET' 
             WHEN @SSub is null and @Sub not null then SELECT dbo.EpsComprimentoSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET' 
             ELSE SELECT dbo.EpsComprimentoSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET' END; 

    DECLARE @Largura float = CASE WHEN @Sub is null AND @SSub not null then SELECT dbo.EpsLarguraSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET' 
            WHEN @SSub is null and @Sub not null then SELECT dbo.EpsLarguraSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET' 
            ELSE SELECT dbo.EpsLarguraSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET' END; 

    DECLARE @Altura float = CASE WHEN @Sub is null AND @SSub not null then SELECT dbo.EpsAlturaSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET' 
           WHEN @SSub is null and @Sub not null then SELECT dbo.EpsAlturaSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET' 
           ELSE SELECT dbo.EpsAlturaSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET' END; 


    DECLARE @Peso float = CASE WHEN @Sub is null and @SSub is not null then SELECT Peso FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET' 
           WHEN @Sub not null and @SSub is null then SELECT Peso FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET' 
           ELSE SELECT Peso FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET' END; 

    DECLARE @Pagamento varchar(2) = CASE WHEN @Sub is null and @SSub not null then SELECT TOP 1 CodigoDeFabricacao FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET' 
             WHEN @Sub not null and @SSub is null then SELECT TOP 1 CodigoDeFabricacao FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET' 
             ELSE SELECT TOP 1 CodigoDeFabricacao FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET' END; 

    DECLARE @Fabricacao varchar(2) = CASE WHEN @Sub is null and @SSub not null then SELECT TOP 1 CodigoDeFabricacao FROM VShiPartBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET' 
              WHEN @Sub not null and @SSub is null then SELECT TOP 1 CodigoDeFabricacao FROM VShiPartBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET' 
              ELSE SELECT TOP 1 CodigoDeFabricacao FROM VShiPartBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET' END; 

    RETURN CASE WHEN @Peso<5000 AND @Largura<2500 AND @Altura<4000 AND @Comprimento<10000 THEN '1-B' 
       WHEN @Peso<5000 AND @Largura<5000 AND @Altura<4000 AND @Comprimento<10000 THEN '1-A' 
       WHEN @Peso<10000 AND @Largura<10000 AND @Altura<4000 AND @Comprimento<10000 THEN '2' 
       WHEN @Peso<5000 AND @Largura<2500 AND @Altura<4000 AND @Comprimento>=10000 AND @Comprimento<15000 THEN '3' 
       ELSE 'ESP' END 

    END 
GO 

ロジック部は、既に述べた、しかし、私がSQL構文に問題を抱えている表示され、アドバイスしてください...

+0

エラーメッセージを読んで見つけようとしましたか? – dfundako

+0

これはエラーです: '1テキストにエラーがありますか、オブジェクトの種類がこのドキュメントに対応していません。 ... ' –

+1

あなたはどのRDBMSを使用していますか? – dfundako

答えて

0

私は、MS SQL Server Management Studioで、それをdebbugedと、このランニングを得ました明らかに:

CREATE FUNCTION EpsClassificacaoConjunto 
(
    -- Add the parameters for the function here 
    @Bloco varchar(5), 
    @Sub varchar(5), 
    @SSub varchar(5) 
) 
RETURNS varchar(5) 
AS 
BEGIN 
    -- Declare the return variable here 
    DECLARE @Result varchar(5) 
    DECLARE @Comprimento float; 
    DECLARE @Largura float; 
    DECLARE @Altura float; 
    DECLARE @Peso float; 
    DECLARE @Pagamento varchar(2); 
    DECLARE @Fabricacao varchar(2); 

    -- Add the T-SQL statements to compute the return value here 
    SELECT @Comprimento = CASE WHEN (@Sub is null AND @SSub is not null) then (SELECT dbo.EpsComprimentoSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET') 
           WHEN (@SSub is null and @Sub is not null) then (SELECT dbo.EpsComprimentoSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET') 
           ELSE (SELECT dbo.EpsComprimentoSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET') END; 

    SELECT @Largura = CASE WHEN (@Sub is null AND @SSub is not null) then (SELECT dbo.EpsLarguraSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET') 
          WHEN (@SSub is null and @Sub is not null) then (SELECT dbo.EpsLarguraSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET') 
          ELSE (SELECT dbo.EpsLarguraSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET') END; 


     SELECT @Altura = CASE WHEN (@Sub is null AND @SSub is not null) then (SELECT dbo.EpsAlturaSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET') 
           WHEN (@SSub is null and @Sub is not null) then (SELECT dbo.EpsAlturaSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET') 
           ELSE (SELECT dbo.EpsAlturaSub(DimensaoDePerfil) FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET') END; 



     SELECT @Peso = CASE WHEN (@Sub is null and @SSub is not null) then (SELECT Peso FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET') 
           WHEN (@Sub is not null and @SSub is null) then (SELECT Peso FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET') 
           ELSE (SELECT Peso FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET') END; 


     SELECT @Pagamento = CASE WHEN (@Sub is null and @SSub is not null) then (SELECT TOP 1 CodigoDeFabricacao FROM VShiAssemblyBom WHERE [email protected] AND Submontagem is null AND [email protected] AND Tipo='SET') 
             WHEN (@Sub is not null and @SSub is null) then (SELECT TOP 1 CodigoDeFabricacao FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET') 
             ELSE (SELECT TOP 1 CodigoDeFabricacao FROM VShiAssemblyBom WHERE [email protected] AND [email protected] AND [email protected] AND Tipo='SET') END; 


     SELECT @Fabricacao = CASE WHEN (@Sub is null and @SSub is not null) then (SELECT TOP 1 CodigoDeFabricacao FROM VShiPartBom WHERE [Bloco Orig.][email protected] AND Submontagem is null AND [email protected] AND Tipo='SET') 
              WHEN (@Sub is not null and @SSub is null) then (SELECT TOP 1 CodigoDeFabricacao FROM VShiPartBom WHERE [Bloco Orig.][email protected] AND [email protected] AND Subsubmontagem is null AND Tipo='SET') 
              ELSE (SELECT TOP 1 CodigoDeFabricacao FROM VShiPartBom WHERE [Bloco Orig.][email protected] AND [email protected] AND [email protected] AND Tipo='SET') END; 

    SELECT @Result = CASE WHEN @Peso<5000 AND @Largura<2500 AND @Altura<4000 AND @Comprimento<10000 THEN '1-B' 
          WHEN @Peso<5000 AND @Largura<5000 AND @Altura<4000 AND @Comprimento<10000 THEN '1-A' 
          WHEN @Peso<10000 AND @Largura<10000 AND @Altura<4000 AND @Comprimento<10000 THEN '2' 
          WHEN @Peso<5000 AND @Largura<2500 AND @Altura<4000 AND @Comprimento>=10000 AND @Comprimento<15000 THEN '3' 
          ELSE 'ESP' END 

    -- Return the result of the function 
    RETURN @Result 

END 
GO 
関連する問題