1

Microsoft SSMS でスカラー値関数を作成しました。次のとおりです。

CREATE FUNCTION [dbo].[fGetCurrentBalFromName] 
(
    @Name NVarchar,
    @CliFl Bit
)
RETURNS Money
AS
BEGIN
    DECLARE @CurrentBal Money

    select @CurrentBal=SUM(tt.Debt) from  
     (select case t.Clientfl when 1 then dbo.fGetClientNameFromId(t.AgentID) 
                    else dbo.fGetSupplierNameFromId(t.AgentID) 
             end as Cli,
             t.Clientfl,
         case t.Clientfl when 1 then 
            case t.Incomfl 
                when 1 then t.Amount 
                       else (-1)*t.Amount 
            end
         else
            case t.Incomfl
                when 1 then (-1)*t.Amount
                        else t.Amount
            end
         end as Debt              
      from [Store].[dbo].[Money] t) tt where tt.Cli=@Name and tt.Clientfl=@CliFl
      group by tt.Cli

    RETURN @CurrentBal

END

実行すると

Select dbo.fGetCurrentBalFromName('Вали',1)

結果はありません(NULL)。

しかし、パラメータなしでクエリを単独で実行しようとすると

select SUM(tt.Debt) from  
         (select case t.Clientfl when 1 then dbo.fGetClientNameFromId(t.AgentID) 
                        else dbo.fGetSupplierNameFromId(t.AgentID) 
                 end as Cli,
                 t.Clientfl,
             case t.Clientfl when 1 then 
                case t.Incomfl 
                    when 1 then t.Amount 
                           else (-1)*t.Amount 
                end
             else
                case t.Incomfl
                    when 1 then (-1)*t.Amount
                            else t.Amount
                end
             end as Debt              
          from [Store].[dbo].[Money] t) tt where tt.Cli='Вали' and tt.Clientfl=1
          group by tt.Cli

私はまさに私が欲しいものを手に入れます。では、スカラー値関数を作成するときに私が犯した間違いは何ですか。どんな助けでも大歓迎です!

4

1 に答える 1

4

パラメータのサイズを指定する必要があります@Name

@Name NVarchar

サイズを指定しないと、デフォルトで 1 文字になります。

このようなことを試してください。

@Name NVarchar(100)

SQL フィドル

于 2012-10-23T05:50:08.887 に答える