2015-10-16 40 views
0

我遇到了此存储过程的问题。我已经研究了几次,所以我猜测我只是错过了一些明显的东西。如果我尝试删除选择列表的任何部分,那么SSMS会给我同样的错误。如果我让他们平等,然后VS调试给我的错误。我对这个有点困惑。大多数程序是如下 -INSERT语句的选择列表包含比插入列表更多的项目

ALTER PROCEDURE [dbo].[Billing_Misc_Update_Test] 
(
@ID as varchar(100), @CandidateID as varchar(100), @EntryType as varchar(100), @Amount as money, @EntryDate as smalldatetime, @InvoiceBillingDate as smalldatetime, @ClientKey as varchar(100), @BillingMemo as varchar(100), @UserID as varchar(100), @RegBilled as varchar(100), @OTBilled as varchar(100), @RegPaid as varchar(100), @OTPaid as varchar(100), @chkStatus as varchar(25) ) 

-- This is an insert 
if @ID = 0 
Begin 
    If not exists (select 1 from AccoutingReports with (nolock) 
        where Verify = @CandidateID 
         and BillingDate = @EntryDate 
         and InvoiceBillingDate = @InvoiceBillingDate 
         and BillingMiscType = @BillingMiscType 

        ) 
    Begin 
    if @EntryType = 'Expense' or @EntryType = 'Bonus' or @EntryType = 'other' 
    Begin 
     Insert into AccoutingReports ( 
         [BillingDate], 
         [ConsultantName], 
         [HoursWorked], 
         [OTHoursWork], 
         [HoursBilled], 
         [RegHoursBilled], 
         [OTHoursBilled], 
         [PayDollars], 
         [BilledDollars], 
         [RegBilledDollars], 
         [NegBilledDollars], 
         [OTBilledDollars], 
         [NegOTBilled_Dollars], 
         [MedicalCost], 
         [FicsSutaSS], 
         [PerDiem], 
         [PerDiemPay], 
         [COGS], 
         [GrossProfit], 
         [GrossMargin], 
         [CommissionPercent], 
         [CommissionSales], 
         [CommissionRecruiter],  
         [Verify], 
         [BurdenPercent], 
         [ClientKey], 
         [W1], 
         [W2], 
         [EarnedDays], 
         [VacationDays],   
         [Memo],  
         [TSDate], 
         [isImported], 
         [BillingMiscType], 
         [BillingMiscMemo], 
         [InvoiceBillingDate], 
         [InvoiceStatus])  


        Select 
         @EntryDate, 
         'Updated By UserID: ' + @UserID, 
         0, 
         0, 
         0, 
         0, 
         0, 
         @amount, 
         @amount, 
         @amount, 
         @amount, 
         0, 
         0, 
         0, 
         0, 
         0, 
         0, 
         0, 
         0, 
         0, 
         0, 
         0, 
         0, 
         @CandidateID, 
         0, 
         @ClientKey, 
         0, 
         0, 
         0, 
         0, 
         @BillingMemo, 
         getdate(), 
         0, 
         @BillingMiscType, 
         @BillingMemo, 
         @InvoiceBillingDate, 
         @chkStatus 
    End Else 
    Begin 
     Insert into AccoutingReports ( 
         [BillingDate], 
         [ConsultantName], 
         [HoursWorked], 
         [OTHoursWork], 
         [HoursBilled], 
         [RegHoursBilled], 
         [OTHoursBilled], 
         [PayDollars], 
         [BilledDollars], 
         [RegBilledDollars], 
         [NegBilledDollars], 
         [OTBilledDollars], 
         [NegOTBilled_Dollars], 
         [MedicalCost], 
         [FicsSutaSS], 
         [PerDiem], 
         [PerDiemPay], 
         [COGS], 
         [GrossProfit], 
         [GrossMargin], 
         [CommissionPercent], 
         [CommissionSales], 
         [CommissionRecruiter],  
         [Verify], 
         [BurdenPercent], 
         [ClientKey], 
         [W1], 
         [W2], 
         [EarnedDays], 
         [VacationDays],   
         [Memo],  
         [TSDate], 
         [isImported], 
         [BillingMiscType], 
         [BillingMiscMemo], 
         [InvoiceBillingDate], 
         [InvoiceStatus])  


     Select   @EntryDate, 
         'Updated By UserID: ' + @UserID, 
         convert(money, @RegPaid) + convert(money, @OTPaid), 
         @OTPaid, 
         convert(money, @RegBilled) + convert(money, @OTBilled),   
         @RegBilled,   
         @OTBilled,    
         (convert(money, @RegPaid) * @payrate) + (convert(money, @OTPaid) + @PayRate), 
         (convert(money, @RegBilled) * @BillRate) + (convert(money, @OTBilled) + @BillRate),     
         0,     
         0,     
         0,      
         0,    
         0,    
         0,   
         0,    
         0,  
         0,    
         0,    
         0,      
         0,     
         0,      
         0, 
         @CandidateID,    
         0,  
         @ClientKey,  
         0,  
         0,    
         0,    
         0, 
         @BillingMemo, 
         getdate(),   
         0, 
         @BillingMiscType,  
         @BillingMemo, 
         @InvoiceBillingDate, 
         @chkStatus 
    End 
     Select RowsUpdated = @@Rowcount, Error = 'New Entry: Transaction Successfull' 
    End Else 
    Begin 
     Select RowsUpdated = 0, Error = 'Entry Already Exists' 
    End 
End Else 
Begin 
    If not exists (select 1 from AccoutingReports with (nolock) 
        where Verify = @CandidateID 
         and BillingDate = @EntryDate 
         and InvoiceBillingDate = @InvoiceBillingDate 
         and BillingMiscType = @BillingMiscType 
         and ID <> @ID 
        ) 
    Begin      
    if @EntryType = 'Expense' or @EntryType = 'Bonus' or @EntryType = 'other' 
    Begin 
     Update AccoutingReports 
      Set [BillingDate] = @EntryDate 
      , [ConsultantName] = 'Updated By UserID: ' + @UserID 
      , [HoursWorked] = 0 
      , [OTHoursWork] = 0 
      , [HoursBilled] = 0 
      , [RegHoursBilled] = 0 
      , [OTHoursBilled] = 0    
      , [PayDollars] = @amount 
      , [BilledDollars] = @amount 
      , [RegBilledDollars] = @amount 
      , [NegBilledDollars] = @amount 
      , BillingMiscType = @BillingMiscType 
      , BillingMiscMemo = @BillingMemo 
      , InvoiceBillingDate = @InvoiceBillingDate 
      , InvoiceStatus = @chkStatus 
     where ID = @ID 
    End Else 
    Begin 
     Update AccoutingReports 
      Set [BillingDate] = @EntryDate 
      , [ConsultantName] = 'Updated By UserID: ' + @UserID 
      , [HoursWorked] = convert(money, @RegPaid) + convert(money, @OTPaid) 
      , [OTHoursWork] = @OTPaid 
      , [HoursBilled] = convert(money, @RegBilled) + convert(money, @OTBilled) 
      , [RegHoursBilled] = @RegBilled 
      , [OTHoursBilled] = @OTBilled    
      , [PayDollars] = (convert(money, @RegPaid) * @payrate) + (convert(money, @OTPaid) + @PayRate) 
      , [BilledDollars] = (convert(money, @RegBilled) * @BillRate) + (convert(money, @OTBilled) + @BillRate) 
      , [RegBilledDollars] = 0 
      , [NegBilledDollars] = 0 
      , BillingMiscType = @BillingMiscType 
      , BillingMiscMemo = @BillingMemo 
      , InvoiceBillingDate = @InvoiceBillingDate 
      , InvoiceStatus = @chkStatus 
     where ID = @ID 
    End 
     Select RowsUpdated = @@Rowcount, Error = 'Update Entry: Transaction Successfull' 
    End Else 
    Begin 
     Select RowsUpdated = 0, Error = 'Entry Already Exists' 
    End 
End 

的ID通常导致到0,并且EntryType我已经开始是奖金。所以它应该运行插入/选择语句的第一块,但是会出现错误。

值得注意的是,我所做的更改是将新列InvoiceStatus添加到表AccountingReports以存储chkStatus作为varchar(25)。在将这个新列添加到表中并修改insert/select语句之后,它给了我这个错误。我很迷茫,所以任何建议都会有帮助,谢谢!

+0

我看到的唯一问题是你的程序参数后需要'AS BEGIN ... SP Guts ... END' –

+0

这里只有两条插入语句。将它们与您的程序分开并自行运行。一些体面的格式化将使调试变得更容易。当你将大量列的语句插入2行时,它会使调试和支持变得更加困难。 –

+0

@ Dave.Gugg语法应该是准确的,因为我只是修改了以前可以正常工作的SP。我只是试图让它适合堆栈溢出的灰色编码框的要求。 – ASimonis01

回答

0

我最终在数据库中创建了另一个表,第二个insert/select语句将相同的ID + Candidate ID和过滤后的chkstatus列与参数放在一起。我不知道为什么原来的解决方案不起作用,但这是一个相当简单的解决方法,不应该太离开理想的解决方案。干杯!

相关问题