/****************************************************************************** 
存储过程名称: p_nw_star_qtxx_wstw 
创建人    : 赵校辉 
创建时间  : 2003-10-28 17:36:00 
修改人    :  
修改时间  :  
修改说明  :  
内容描述  : 网上提问与回答的存储过程( 包括添加、修改及删除 ). 
版  本    : 2.0 
*******************************************************************************/

解决方案 »

  1.   

    感谢楼上的关注
    DinFinWarrant
    结构如下
    [date]   datetime     明细账日期
    [no]     varchar(50)明细账编号
    summary  varchar(50)明细账摘要
    subject1 varchar(50)借方科目名称
    subject2 varchar(50)贷方科目名称
    money    float        金额
    id       bigint       唯一标识
    --其他不相关列略
    结果集举例
    2003-9-2  ,3 购海鲜付款 应付帐款\王老五 银行存款 18117.1
      

  2.   

    --只说一下格式问题,我一般会采用这样的格式CREATE PROCEDURE DetailsDebt 
    @subject nvarchar(50),  --加上参数说明
    @StartDate varchar(10) , 
    @EndDate varchar(10)  
    AS
    /*--存储过程说明:
    过程名称:DetailsDebt
    功    能:得到明细账
    执行结果:返回结果为区间明细账
    修改时间:16:53 2004-1-31
    作    者:
    --*/
    SELECT a.*        --尽量写出字段列表,而不是*
    FROM(
    SELECT
          --日期
          [date], 
          --编号,忽略编号中的空格
          CASE substring([no],1,2)  WHEN ' ,' then substring([no],3,10) END as [no],
          --摘要
          summary,
          --对方科目 
          CASE subject1 WHEN @subject  THEN '' ELSE subject1 END +
          CASE subject2 WHEN @subject  THEN '' ELSE subject2 END AS subject, 
          --借方金额
          CASE subject1 WHEN @subject  THEN Money ELSE null END AS Money1,
          --贷方金额
          CASE subject2 WHEN @subject  THEN Money ELSE null END AS Money2
            FROM DinFinWarrant
            WHERE ((subject1 = @subject ) OR
                  (subject2 = @subject )) and [date] between @StartDate and  @EndDate) AS a
    --根据日期和编号排序
    order by a.date,a.no
    GO
      

  3.   

    非常感谢 zjcxc(邹建.共享果) ,我按照您的格式改了。

    /*--存储过程说明:
    过程名称:DetailsDebt
    功    能:得到明细账
    执行结果:返回结果为区间明细账
    修改时间:16:53 2004-1-31
    作    者:
    --*/为什么用--?
      

  4.   

    感谢victorycyz(中海,学SQL Server的菜鸟)
      

  5.   

    --是我的一个使用习惯一方面是我觉得这样好看一点.另一方面,对于注释,我有时里面是代码.例如,在一个存储过程中,有可能有多种处理方法,需要根据情况做调整:create proc aa
    as 
    .../*--查询处理方法1
    select * from 表 ...
    --*//*--查询处理方法2
    select * from 表 ...
    --*/...
    go如果我要存储过程执行指定的代码.只需要将/*--前加上--,这段代码就可以执行了.
      

  6.   

    再次感谢zjcxc(邹建.共享果)受益匪浅!
      

  7.   

    是啊感谢zjcxc(邹建.共享果)学习好习惯
      

  8.   

    又學了一招,謝謝zjcxc(邹建.共享果)
      

  9.   

    CASE substring([no],1,2)  WHEN ' ,' then substring([no],3,10) END as [no],应该改为CASE substring([no],1,2)  WHEN ' ,' then substring([no],3,10) else [no] END as [no],--编号,忽略编号中的空格我觉得CASE中一定要加个else,否则会出现容易疏忽的错误