首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SqlServer存储过程解决办法

2013-09-28 
SqlServer存储过程Set @querySql Declare opr_Cursor Cursor scroll for Select Distinct Contribution

SqlServer存储过程

Set @querySql = 'Declare opr_Cursor Cursor scroll for Select Distinct Contributioner As OprID, b.EmployeeName, c.Name, c.StationID From V_IncreaseIncome_Contribution a LEFT OUTER JOIN JC_Employee b On a.Contributioner=b.EmployeeCode Or a.Contributioner=b.EmployeeName Inner Join JC_Organization c On b.OrgID=c.OrgID Where a.IsChecked=3 And a.IsDeleted=0 And a.OperateOn>=''' +  CONVERT(varchar(20), @startDT) + ''' And a.OperateOn<=''' + CONVERT(varchar(20), @endDT) + ''''
            if(@StationID is not null)
            Begin
               Set @querySql = @querySql + ' And a.CreateOrgID=' + Convert(varchar(10), @StationID) +''
            End 
            Exec(@querySql)
            Open opr_Cursor 
            Fetch Next From opr_Cursor into @OprID, @OprName, @OrgName1, @StationID1
        while(@@Fetch_Status = 0)
      Begin
     Select @ATBonus=@ATBonus+ISNULL(Sum(CRewardMny), 0) From V_IncreaseIncome_Contribution Where Contributioner=@OprID And IsChecked=3 And IsDeleted=0 And OperateOn>=@startDT And OperateOn<=@endDT And IncomeType=6
             Fetch Next From opr_Cursor into @OprID, @OprName, @OrgName1, @StationID1
  End
            Close opr_Cursor
            Deallocate opr_Cursor


写了这样一个存储过程 为什么ATBonus查不出值来 不知道哪里出错? 存储 SQL?Server Cursor SQL
[解决办法]

Set @querySql = 'Declare opr_Cursor Cursor scroll for Select Distinct Contributioner As OprID, b.EmployeeName, c.Name, c.StationID From V_IncreaseIncome_Contribution a LEFT OUTER JOIN JC_Employee b On a.Contributioner=b.EmployeeCode Or a.Contributioner=b.EmployeeName Inner Join JC_Organization c On b.OrgID=c.OrgID Where a.IsChecked=3 And a.IsDeleted=0 And a.OperateOn>=''' +  CONVERT(varchar(20), @startDT) + ''' And a.OperateOn<=''' + CONVERT(varchar(20), @endDT) + ''''
if(@StationID is not null)
Begin
   Set @querySql = @querySql + ' And a.CreateOrgID=' + Convert(varchar(10), @StationID) +''
End 
Exec(@querySql)
Open opr_Cursor 
Fetch Next From opr_Cursor into @OprID, @OprName, @OrgName1, @StationID1
while(@@Fetch_Status = 0)
  Begin
     Select @ATBonus=isnull(@ATBonus,0)+ISNULL(Sum(CRewardMny), 0)    -->这一行,如果原来@ATBonus为null, 相加后它还是null,所以先用isnull()函数把空值转换为0
From V_IncreaseIncome_Contribution 
Where Contributioner=@OprID And IsChecked=3 And IsDeleted=0 And OperateOn>=@startDT And OperateOn<=@endDT And IncomeType=6
     Fetch Next From opr_Cursor into @OprID, @OprName, @OrgName1, @StationID1
  End
Close opr_Cursor
Deallocate opr_Cursor

如果不是空值的问题,那就是条件不符合

热点排行