CREATE  PROCEDURE [dbo].[qrFindAnUserAllValidProgramProductAc2UserNo_2] 
@UserNo char(16)
AS
SELECT d.[productID], MIN(StartDateNow) as StartDate, MAX(endDateNow) as EndDate, COUNT(*) as cntBills
FROM [WFDN3].[dbo].[wfBillDetail] AS d
WHERE billID=ANY
(
SELECT billID  FROM [WFDN3].[dbo].[wfBill]  
WHERE 
(
userNo=@UserNo
AND ( IncludeProgram = '1' )
) )
aND
(
d.[productID] = ANY
(
SELECT e.[productID] FROM wfProduct as e WHERE e.[CategoryID]= 
(
SELECT f.[CategoryID] FROM wfProductCategories as f
WHERE f.[CategoryName] = '节目'
)
)
)
/*ORDER BY d.[productID] ASC*/
GROUP BY d.[productID]如上存储过程,
我想自己建立个函数,声明个变量,然后把如上存储过程返回表中的一个字段 EndDate赋给变量。请大家指教,分不够还可以加!
不考虑EndDate有多行的问题

解决方案 »

  1.   

    var
      UserNO : String;begin
     userNo := '123';
     qry.close;
     qry.sql.text := ' declare  @No char(6)   Execute qrFindAnUserAllValidProgramProductAc2UserNo_2 '+Quotedstr(UserNo);
     qry.open;
     showMessage(qry.fields[0].asstring);
    end;
      

  2.   

    CREATE  PROCEDURE [dbo].[qrFindAnUserAllValidProgramProductAc2UserNo_2] (@UserNo varchar(16) ,@EndDate DateTime output)
    AS 
    -- 不考慮多行就這樣寫
    SELECT d.[productID], MIN(StartDateNow) as StartDate,@EndDate =  MAX(endDateNow) as EndDate, COUNT(*) as cntBills 
    FROM [WFDN3].[dbo].[wfBillDetail] AS d 
    WHERE billID=ANY 

    SELECT billID  FROM [WFDN3].[dbo].[wfBill]  
    WHERE 

    userNo=@UserNo 
    AND ( IncludeProgram = '1' ) 
    ) ) 
    aND 

    d.[productID] = ANY 

    SELECT e.[productID] FROM wfProduct as e WHERE e.[CategoryID]= 

    SELECT f.[CategoryID] FROM wfProductCategories as f 
    WHERE f.[CategoryName] = '节目' 



    /*ORDER BY d.[productID] ASC*/ 
    GROUP BY d.[productID] 
    var
      UserNO : String;begin
     userNo := '123';
     qry.close;
     qry.sql.text := ' declare @EndDate Datetime    Execute qrFindAnUserAllValidProgramProductAc2UserNo_2 '+Quotedstr(UserNo)+' @EndDate Output   select @EndDate as EndDate';
     qry.open;
     showMessage(qry.fieldbyname('EndDate').asstring);
    end;
      

  3.   

    類似以下這樣,再聲明變量使用
      
    with DM.adoq_Chart do
      begin
        Close;
        SQL.Clear;
        SQL.Add('EXEC ShopFloor_OrderStatus '+quotedstr(Plato_Frm.RzEdit4.Text)+','+quotedstr('All'));
        ExecSQL;
      end;
      

  4.   

    针对 EndDate 加个输出类型变量就可以了!~ 即@EDate DateTime output! 2楼已经说了!~
      

  5.   


    function GetEndDate(UserNo: string; var EndDate: TDateTime): Boolean;
    begin
      with ADOStoredProc1 do
      begin
        Close;
        ProcedureName := 'qrFindAnUserAllValidProgramProductAc2UserNo_2';  //你这个名字实在是太长了一点
        Parameters.Refresh;
        Parameters.ParamByName('@UserNo').Value := UserNo;
        Open;
        if not IsEmpty then
        begin
          EndDate := FieldByName('EndDate').AsDateTime;
          Result := true;
        end
        else Result := false;
      end;
    end;
      

  6.   

    晕,我没说清楚,我要建的是SQL自定义函数,不用DELPHI
      

  7.   

    简单写下 类似如下
    CREATE FUNCTION Func_EndDate (@i datetime)  
    RETURNS datetime AS  
    BEGIN 
      declare @j datetime  //声明的变量
      set @j = @i
      return @j
    END存储过程里加入dbo.Func_EndDate(EndDate) 
    不知道你这样做有什么目的!~
      

  8.   


    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE FUNCTION [dbo].[qrFindAnUserAllValidProgramProductAc2UserNo_2](@UserNo char(16))
    RETURNS datetime
    AS
    BEGIN
    declare @enddate datetime
    SELECT d.[productID], MIN(StartDateNow) as StartDate, MAX(endDateNow)as EndDate, COUNT(*) as cntBills 
    into temp
    FROM [WFDN3].[dbo].[wfBillDetail] AS d 
    WHERE billID=ANY 

    SELECT billID  FROM [WFDN3].[dbo].[wfBill]  
    WHERE 

    userNo=@UserNo 
    AND ( IncludeProgram = '1' ) 
    )  ) 
    aND 

    d.[productID] = ANY 

    SELECT e.[productID] FROM wfProduct as e WHERE e.[CategoryID]= 

    SELECT f.[CategoryID] FROM wfProductCategories as f 
    WHERE f.[CategoryName] = '节目' 



    /*ORDER BY d.[productID] ASC*/ 
    GROUP BY d.[productID]
    select @enddate=EndDate from temp
    drop table temp
    return @enddate
    END
      

  9.   

    如果EndDate有多行,可以在
    select @enddate=EndDate from temp後加上條件 where 
    可以取出EndDate,這裡,我是把你的EndDate當作時間類型的。
      

  10.   

    我不是想改写这个存储过程,这个是合作方的,我不能改,我只想写个SQL函数调用它的返回数据集中的EndDate字段,不用考虑多行问题