Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server INSERT语句的select列表包含的项目多于INSERT列表_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql server INSERT语句的select列表包含的项目多于INSERT列表

Sql server INSERT语句的select列表包含的项目多于INSERT列表,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,这个存储过程有问题。我已经研究过几次了,所以我猜我只是错过了一些明显的东西。如果我尝试并实际删除选择列表的任何部分,那么SSMS会给出相同的错误。如果让它们相等,那么VS debug会给出错误。我对这个有点困惑。大部分程序如下: ALTER PROCEDURE [dbo].[Billing_Misc_Update_Test] ( @ID as varchar(100), @CandidateID as varchar(100), @EntryType as varchar(100), @Amo

这个存储过程有问题。我已经研究过几次了,所以我猜我只是错过了一些明显的东西。如果我尝试并实际删除选择列表的任何部分,那么SSMS会给出相同的错误。如果让它们相等,那么VS debug会给出错误。我对这个有点困惑。大部分程序如下:

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是Bonus。因此,它应该运行insert/select语句的第一个块,但会给出一个错误


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

我最后在数据库中创建了另一个表,以及第二个insert/select语句,该语句将放置相同的ID+候选ID,然后是带参数的筛选chkstatus列。我不知道为什么最初的解决方案不起作用,但这是一个相当简单的解决方案,不应该从理想的解决方案中拿走太多东西。干杯

我看到的唯一问题是,在你的程序参数之后,你需要一个AS BEGIN。。。SP勇气。。。这里只有两条insert语句。将它们与您的过程分开,并单独运行它们。一些像样的格式将使调试变得容易得多。当您将包含大量列的insert语句塞进两行时,调试和支持会更加困难。@Dave.Gugg语法应该准确,因为我只是在修改一个以前工作正常的SP。我只是想让它符合Stack Overflow的灰色编码框要求。@SeanLange它应该只运行第一个。我已经对它进行了详细介绍,事实上,在添加InvoiceStatus列之前,它运行良好,这让我相信它存在一些宏级别的错误,而不一定是逗号或小语法问题。不管怎样,我已经听从了你的建议,并且可以相应地对其进行编辑。@Dave.Gugg@BillingMiscType和@payrate也未声明。SQL Server不分析此代码。