نمایش نتایج 1 تا 5 از 5

نام تاپیک: نحوه تعریف تابع و خروجی Table به صورت شرطی !!!

  1. #1

    Exclamation نحوه تعریف تابع و خروجی Table به صورت شرطی !!!

    سلام
    من یک تابع به این صورت دارم

    CREATE FUNCTION FN_MFD_SelectedAcc_Code (@UserCode nvarchar(50))
    RETURNS TABLE AS
    RETURN
    (
    Select Code
    From Tbl1
    Where Code=@UserCode
    )
    حالا می خوام یک متغییر Mod هم بزارم و با توجه به Mod دو خروجی متفاوت بگیرم
    CREATE FUNCTION FN_MFD_SelectedAcc_Code (@UserCode nvarchar(50),@Mod tinyint)  
    RETURNS TABLE AS
    RETURN
    (
    IF (@Mod = 1)
    Begin
    Select Code
    From Tbl1
    Where Code=@UserCode
    End
    IF (@Mod = 2)
    Begin
    Select Code
    From Tbl2
    Where Code=@UserCode
    End
    )

    ولی Error میده !؟
    Msg 156, Level 15, State 1, Procedure FN_MFD_SelectedAcc_Code, Line 5
    Incorrect syntax near the keyword 'IF'.
    Msg 102, Level 15, State 1, Procedure FN_MFD_SelectedAcc_Code, Line 17
    Incorrect syntax near ')'.

    نمی دونم باید به چه صورت تعریف کنم ! من می خوام با توجه به Mod از جداول متفاوتی Query بگیرم !
    ممنون از دوستان
    خواستن ، توانتستن است !!!

  2. #2

    نقل قول: نحوه تعریف تابع و خروجی Table به صورت شرطی !!!

    با سلام
    و تشکر از خودم
    فکر کنم حل شد ولی اگه دوستان راه بهتری هم می دونن بگن
    ممنون !
    CREATE FUNCTION FN_MFD_SelectedAcc_Code (@UserCode nvarchar(50),@Mod tinyint)  
    RETURNS @ReutrnTable TABLE
    (
    Code nvarchar(50)
    )
    As
    Begin
    IF (@Mod = 1)
    Begin
    INSERT INTO @ReutrnTable
    Select Code
    From tbl1
    Where Code=@UserCode
    End
    IF (@Mod = 2)
    Begin
    INSERT INTO @ReutrnTable
    Select Code
    From tbl1
    Where Code=@UserCode
    End
    Return
    End
    خواستن ، توانتستن است !!!

  3. #3

    نقل قول: نحوه تعریف تابع و خروجی Table به صورت شرطی !!!

    این تابع بیش از انداره کنده !
    من دستورات داخل این تابع رو که جدا اجرا می کنم سرعت خوبه !!
               Select Code
    From tbl1
    Where Code=@UserCode
    ولی فکر کنم مشکل از اون INSERT INTO @ReutrnTable این تو تعداد بالا سرعت رو کم می کنه !
    من راهی به غیر از استفاده از Function دارم !
    من واسه یه همچین چیزی
    Select Code, Name From Tbl3   
    Where Code In
    (
    Select Acc_Code From FN_MFD_SelectedAcc_Code('60',1)
    )


    من راهی دارم که این Function سریعتر عمل کنه !
    خواستن ، توانتستن است !!!

  4. #4

    نقل قول: نحوه تعریف تابع و خروجی Table به صورت شرطی !!!

    سلام امین جان،
    ترجیحا از توابع مجزا برای جستجو روی جداول مختلف استفاده کنین (البته حالت Inline نه Multi Statement). این به SQL Server کمک بیشتری میکنه برای پیدا کردن الگوریتم بهینه

  5. #5

    نقل قول: نحوه تعریف تابع و خروجی Table به صورت شرطی !!!

    سلام و تشکر فراوان از آقای ثباتی عزیز
    ممنون از راهنمای هایی که می کنید ....
    من هدفم استفاده از این Function در یک SP است ... این SP هم در یک گزارش استفاده میشه می خوام باتوجه به Mod برای هر دو گروه مختلف گزارش بگیرم .... تعداد این مدل SP ها هم که در جاهای مختلف استفاده میشه تقریبا زیاده حالا من اگه از توابع مجزا استفاده کنم باید واسه هر گزارش دو یا بیشتر SP تعریف کنم ...
    واسه همین می خواستم کد نویسیم کمتر بشه ولی انگار باید برای سرعت بهتر کد بیشتری بنویسم
    باز هم ممنون ... .
    خواستن ، توانتستن است !!!

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •