2012-02-14 11 views
2

こんにちは私はsqlserver 2008でudf関数を作成しました... "無効なオブジェクト名 'dbo.Function_Client"に アクセスしようとしました テーブルからレコードの数を返したいそのスカラー関数ので...返す変数へ... elseロジック場合、私は..私は、月の部分や部品を追加する各@clientaliasためdboで作成されたudf関数にアクセスしようとすると、SQLサーバー "無効なオブジェクト名 'dbo.Function_Client'。"

CREATE FUNCTION [dbo].[Function_Clients] (@ClientAlias varchar(10) , 
    @TimePeriod int, @TypeOfTimePeriod varchar(1)) 

RETURNS INT 
AS 
BEGIN 
    DECLARE @COUNT INT; 

    IF(@ClientAlias='AEP' AND @TypeOfTimePeriod ='M') 
    Set @COUNT = (SELECT DISTINCT COUNT(*) AS 'NO_AEP' from dbo.Engagement INNER JOIN 
     dbo.Client ON dbo.Engagement.ClientIdentifier = dbo.Client.ClientIdentifier 
    WHERE (dbo.ClientInvolvementRole.ClientInvolvementID = '1356790AERTY') 
    AND (CONVERT(datetime, dbo.Engagement.EndDate, 103) 
    <= CONVERT(datetime, DATEADD(MONTH, @TimePeriod , GETDATE()), 103)) 


ELSE 

---SAME ABOVE CODE BUT REPLACING MONTH WITH DAY AS 
---"DATEADD(DAY,@TimePeriod , GETDATE()), 103)" IN WHERE CONDITION . 

...if else (for various client alias) 

RETURN @COUNT; 
END 
GO 

以下

私のUDFを実装している内@TypeOfTimePeriodでの自分の入力に基づいています。 たとえば、@TypeOfTimePeriod = 'M'は月を意味し、 'D'はdateadd部分に追加する日を意味します。

私はdbo.Clients( 'AEP'、12、 'M')

が、その示すエラー 無効なオブジェクト名 'dbo.Function_NoOfClients' から*この選択のように呼ばれています。

私は...私のudf..pleaseで どんな問題が私をdbo.view1とビュー...ではなく、このUDFにアクセスすることを助けることができる...

+0

Olegが指摘した 'SELECT dbo.func()'と 'SELECT * FROM dbo.func()'の違いに加えて、このロジックの一部を統合することを検討しましたか?例えば。終了日をあらかじめ計算しておくか、 'CASE'式を使用するだけで、2つのクエリがあります。また、 'dbo.Engagement.EndDate'は' DATETIME'または文字データ型ですか? –

+0

他にもいくつかのコメントがあります: 'SELECT DISTINCT COUNT(*)'は 'SELECT COUNT(*)'とどう違うのですか?クエリの一部でないときに 'WHERE'節の' dbo.ClientInvolvementRole'を参照するのはなぜですか?この関数は、どのようにして正しく解析され、正しく作成されるのでしょうか? –

+0

@Aaronその代わりにclient.ClientInvolvementIDの代わりに、このClientInvolvementRole ..を入れて、あなたの2番目の質問yestのdatetimeに – praba

答えて

関連する問題