存储过程1
CREATE PROC ProStateAllSource
(
    @BeginDate DATETIME,
    @EndDate  DATETIME   
)
AS
SELECT 
        ChanlInfoTab.ChannelID,
        ChanlInfoTab.ChannelName,
        COUNT(ResumeInfoTab.ResumeID) AS CountNum        (差别)
FROM
    ResumeInfoTab,ChanlInfoTab
WHERE
   UpdateTime>@BeginDate
    AND UpdateTime<@EndDate
    AND  ResumeInfoTab.ChannelID=ChanlInfoTab.ChannelID 
    
GROUP BY  ALL  ChanlInfoTab.ChannelID,
                     ChanlInfoTab.ChannelName
GO存储过程2
CREATE PROC ProStateAllSourceA
(
    @BeginDate DATETIME,
    @EndDate  DATETIME   
)
AS
SELECT
     ChanlInfoTab.ChannelID,
        ChanlInfoTab.ChannelName,
     COUNT(ResumeID) AS CO                                  (差别)
FROM
    ResumeInfoTab,ChanlInfoTab
WHERE
   UpdateTime>@BeginDate
    AND UpdateTime<@EndDate
    AND   ResumeInfoTab.ChannelID=ChanlInfoTab.ChannelID
   AND StateID=4                                              (差别)
GROUP BY ALL  ChanlInfoTab.ChannelID, ChanlInfoTab.ChannelName
GO传入的参数是一样的,我的想法是在一个DataGrid里面装进这两个存储过程的数据,
两个存储过程的数据条数 和 以及前两个字段的记录也一定是一样的,
就是一个查询字段不一样,那也是因为查询条件不一样.
其他的实现方法也行,只要能帮我解决问题,两个存储过程只是我的一个思路多谢啦!
问题解决了加分

解决方案 »

  1.   

    老大,动态构建SQL语句吧,如(由于没有表结构,所以无法测试,如果有问题给我发CSDN消息):
    CREATE PROC ProStateAllSource
    (
        @BeginDate DATETIME,
        @EndDate  DATETIME,
        @Type bit   
    )
    ASdeclare @SQLStr varchar(2056)set @SQLStr='SELECT 
            ChanlInfoTab.ChannelID,
            ChanlInfoTab.ChannelName,
            COUNT('
    if @Type=0
    set @SQLStr=@SQLStr+'ResumeInfoTab.ResumeID) AS CountNum'
    else
    set @SQLStr=@SQLStr+'COUNT(ResumeID) AS CO'
    set @SQLStr=@SQLStr+' FROM ResumeInfoTab,ChanlInfoTab WHERE '
    set @SQLStr=@SQLStr+'convert(varchar(20),UpdateTime,112)>'+char(39)+convert(varchar(20),@BeginDate,112)+char(39)
    set @SQLStr=@SQLStr+' and convert(varchar(20),UpdateTime,112)<'+char(39)+convert(varchar(20),@EndDate,112)+char(39)
    set @SQLStr=@SQLStr+' and ResumeInfoTab.ChannelID=ChanlInfoTab.ChannelID'
    if @Type=1
    set @SQLStr=@SQLStr+' and StateID=4'
    set @SQLStr=@SQLStr+' GROUP BY ALL  ChanlInfoTab.ChannelID, ChanlInfoTab.ChannelName'exec(@SQLStr)
      

  2.   

    老大,看看此文或许对你理解动态SQL语句有帮助:
    http://www.onlinedatabase.cn/Article_Show.asp?ArticleID=2251
      

  3.   

    CREATE PROC ProStateAllSource
    (
        @BeginDate DATETIME,
        @EndDate  DATETIME,
        @Type bit                 --0:表示是你存储过程1,1:表示你存储过程2
    )
    ASdeclare @SQLStr varchar(2056)set @SQLStr='SELECT 
            ChanlInfoTab.ChannelID,
            ChanlInfoTab.ChannelName,
            COUNT('
    if @Type=0
            --存储过程1与存储过程2相区别部分
    set @SQLStr=@SQLStr+'ResumeInfoTab.ResumeID) AS CountNum'
    else
            --存储过程2与存储过程1相区别部分
    set @SQLStr=@SQLStr+'COUNT(ResumeID) AS CO'
    --下面这部分是两个过程相同的部分,日期在动态存储过程中必须转换成字符串来比较,风格112生成
    --YYYYMMDD格式的日期字符串
    set @SQLStr=@SQLStr+' FROM ResumeInfoTab,ChanlInfoTab WHERE '
    set @SQLStr=@SQLStr+'convert(varchar(20),UpdateTime,112)>'+char(39)+convert(varchar(20),@BeginDate,112)+char(39)
    set @SQLStr=@SQLStr+' and convert(varchar(20),UpdateTime,112)<'+char(39)+convert(varchar(20),@EndDate,112)+char(39)
    set @SQLStr=@SQLStr+' and ResumeInfoTab.ChannelID=ChanlInfoTab.ChannelID'
    if @Type=1
             --存储过程2与存储过程1相区别部分
    set @SQLStr=@SQLStr+' and StateID=4'
    set @SQLStr=@SQLStr+' GROUP BY ALL  ChanlInfoTab.ChannelID, ChanlInfoTab.ChannelName'--以以这句是测试语句(正式用的把它删除),打印出动态生成的SQL语句,
    --只有在查询分析器中执行才能显示
    print @SQLStr--以下这句执行动态生成的SQL语句
    exec(@SQLStr)
      

  4.   

    在查询分析器中执行:
    exec ProStateAllSource '2005-7-30','2005-7-30',0

    exec ProStateAllSource '2005-7-30','2005-7-30',1
    其中具体日期根据你的情况修改
    在"消息"选项卡中看生成的SQL语句
    -------------------------------------------------------------------------------
    或者把你两个表的SQL脚本贴出来,我帮你调试一下