存储过程消息8252

时间:2015-01-09 19:54:21

标签: sql sql-server-2008

运行我的存储过程时,我收到此错误:

  

Msg 8152,Level 16,State 14,Procedure spCompReporting Detail,Line 26

我无法确定其失败的地方。

这是输出:

USE [DatabseName] 
GO DECLARE  *return_value int EXEC  @return_value = [dbo].[spCompReportingDetail1] 
@Date1 = N'12/01/14', 
@Date2 = N'12/10/14' SELECT 'Return Value' = @return_value 
GO

以下是代码:

USE [DatabaseName]
GO
/****** Object:  StoredProcedure [dbo].[spCompReportingDetail1]    Script Date: 01/09/2015 11:23:54 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[spCompReportingDetail1] 
/* 
    First Run.  Puts all in staging table.

    Need to add :
        Liability Removed
        TotalBenCharges
        BenChargesPaidDate
        RemainingBenCharges
*/


@Date1 as datetime,
@Date2 as datetime

AS
exec dbo.npCompReportingTablesCreate
SET ANSI_NULLS OFF

SET QUOTED_IDENTIFIER OFF



--delete from COMP_REPORT_DETAIL_STAGING

INSERT INTO COMP_REPORT_DETAIL_STAGING
                      (ClientID, ClientNumber, CompanyName, ClaimID, LastName, FirstName, SSN, PotentialBenefitCharge, CostCenterNumber, CostCenterDescription, 
                      RegionNumber, RegionDescription, DistrictNumber, DistrictDescription, ClaimDate, BYEDate, HireDate, LastDayWorked, SeparationCode, SepCodeDescr, 
                      SeparationReason, CurClaimStatus, HearingDate, HearingDecision, BoardAppealDate, BoardDecision)
SELECT     CLIENTS.ClientID, Clients.ClientNumber, COMPANY_NAMES.CompanyName, CLAIMS.ClaimID, CLAIMS.LastName, CLAIMS.FirstName, CLAIMS.SSN, 
                      CLAIMS.PotentialBenefitCharge,  COST_CENTERS.CostCenterNumber, COST_CENTERS.CostCenterDescription, 
                      REGIONS.RegionNumber, REGIONS.RegionDescription, DISTRICTS.DistrictNumber, DISTRICTS.DistrictDescription, CLAIMS.ClaimDate, CLAIMS.BYE, 
                      CLAIMS.HireDate, CLAIMS.LastDayWorked, SEPARATION_CODES.SeparationCode, SEPARATION_CODES.[Description] AS SepCodeDescr, 
                      SEPARATION_REASONS.SeparationReason, CUR_CLAIM_STATUS.CurClaimStatus, CLAIMS.HearingDate, DECISIONS_2.Decision AS HearingDecision, 
                      CLAIMS.BoardAppealDate, DECISIONS_1.Decision AS BoardDecision    
FROM         CLIENTS INNER JOIN
                      CLAIMS ON CLIENTS.ClientID = CLAIMS.ClientID INNER JOIN                      
                      COMPANY_NAMES ON CLIENTS.CompanyNameID = COMPANY_NAMES.CompanyNameID INNER JOIN
                      COST_CENTERS ON CLIENTS.ClientID = COST_CENTERS.ClientID AND CLAIMS.CostCenterID = COST_CENTERS.CostCenterID INNER JOIN
                      REGIONS ON CLIENTS.ClientID = REGIONS.ClientID AND COST_CENTERS.RegionID = REGIONS.RegionID INNER JOIN
                      DISTRICTS ON CLIENTS.ClientID = DISTRICTS.ClientID AND REGIONS.DistrictID = DISTRICTS.DistrictID INNER JOIN
                      SEPARATION_CODES ON CLAIMS.SeparationCodeID = SEPARATION_CODES.SeparationCodeID INNER JOIN
                      SEPARATION_REASONS ON CLAIMS.SeparationReasonID = SEPARATION_REASONS.SeparationReasonID AND 
                      SEPARATION_CODES.SeparationCodeID = SEPARATION_REASONS.SeparationCodeID INNER JOIN
                      CUR_CLAIM_STATUS ON CLAIMS.CurClaimStatusID = CUR_CLAIM_STATUS.CurClaimStatusID INNER JOIN
                      DECISIONS DECISIONS_1 ON CLAIMS.BoardDecisionID = DECISIONS_1.DecisionID INNER JOIN
                      DECISIONS DECISIONS_2 ON CLAIMS.HearingDecisionID = DECISIONS_2.DecisionID
WHERE        (CAST(CLAIMS.ClaimDate as datetime) between @Date1 AND @Date2)
ORDER BY   COMPANY_NAMES.CompanyName, CLAIMS.LastName, CLAIMS.FirstName


DELETE FROM COMP_REPORT_DETAIL_STAGING WHERE rtrim(ClientNumber) IN ('888', '999')   ------------------------------------------SPECIAL FOR COMP REPORT-----------------------------------------

UPDATE    COMP_REPORT_DETAIL_STAGING
SET              BenChargesPaidDate = (SELECT  MAX(DateOfCharge) FROM BENEFIT_CHARGES
                            WHERE BENEFIT_CHARGES.ClaimID = COMP_REPORT_DETAIL_STAGING.ClaimID)

UPDATE    COMP_REPORT_DETAIL_STAGING
SET              BenChargesPaidDate = convert(datetime, (cast(datepart(month, BenChargesPaidDate) as char) + '/' + cast(datepart(day, BenChargesPaidDate) as char) + '/' + cast(datepart(year, BenChargesPaidDate) as char)) )  


UPDATE    COMP_REPORT_DETAIL_STAGING
SET              TotalBenCharges = (SELECT SUM(cast(Charges as decimal))  
                FROM BENEFIT_CHARGES
                WHERE  BENEFIT_CHARGES.ClaimID = COMP_REPORT_DETAIL_STAGING.ClaimID)    



UPDATE    COMP_REPORT_DETAIL_STAGING
SET              TotalBenCharges = 0 WHERE TotalBenCharges = null

UPDATE    COMP_REPORT_DETAIL_STAGING
SET         LiabilityRemoved = PotentialBenefitCharge
WHERE   RTRIM(CurClaimStatus) = 'WON'

UPDATE    COMP_REPORT_DETAIL_STAGING
SET              LiabilityRemoved = 0 WHERE LiabilityRemoved < .01

UPDATE    COMP_REPORT_DETAIL_STAGING
SET              LiabilityRemoved = 0 WHERE LiabilityRemoved = null

UPDATE    COMP_REPORT_DETAIL_STAGING
SET              RemainingBenCharges = cast(PotentialBenefitCharge as dec) - cast(TotalBenCharges as dec) - cast(LiabilityRemoved as dec)




--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



DELETE FROM COMP_REPORT_SUMMARY


DECLARE @Total  int
DECLARE @PT int
DECLARE @FC int
DECLARE @UC int

SET @Total =  (SELECT COUNT(*) FROM COMP_REPORT_DETAIL_STAGING)
SET @PT = (SELECT COUNT(*) FROM COMP_REPORT_DETAIL_STAGING WHERE RTRIM(CurClaimStatus) <> 'NON-PROTESTABLE')
SET @FC = (SELECT COUNT(*) FROM COMP_REPORT_DETAIL_STAGING WHERE RTRIM(CurClaimStatus) = 'WON')
SET @UC = (SELECT COUNT(*) FROM COMP_REPORT_DETAIL_STAGING WHERE RTRIM(CurClaimStatus) = 'LOST')

INSERT INTO COMP_REPORT_SUMMARY (TotalClaims) VALUES (@Total)   

----------UPDATE COMP_REPORT_SUMMARY  ----------------------------------------------------------------------------------------------------------------------- REMOVE FOR AGGREGATE REPORTS
----------SET   Client = (SELECT DISTINCT CompanyName FROM COMP_REPORT_DETAIL_STAGING)

UPDATE COMP_REPORT_SUMMARY
SET  FromDate = @Date1

UPDATE COMP_REPORT_SUMMARY
SET   ToDate = @Date2

UPDATE COMP_REPORT_SUMMARY
SET    ProtestableClaims = @PT

UPDATE COMP_REPORT_SUMMARY
SET     NonProtestableClaims = (SELECT COUNT(*) FROM COMP_REPORT_DETAIL_STAGING WHERE RTRIM(CurClaimStatus) = 'NON-PROTESTABLE')

UPDATE COMP_REPORT_SUMMARY
SET FavorableClaims = @FC

UPDATE COMP_REPORT_SUMMARY
SET UnfavorableClaims = @UC

IF @Total > 0 
    BEGIN
        UPDATE COMP_REPORT_SUMMARY
        SET ProtestableToTotal = CAST(ProtestableClaims as decimal) / CAST(TotalClaims as decimal)
    END

UPDATE COMP_REPORT_SUMMARY
SET PendingClaims = (SELECT COUNT(*) FROM COMP_REPORT_DETAIL_STAGING WHERE RTRIM(CurClaimStatus) = 'PENDING')

IF @PT > 0
    BEGIN
        UPDATE COMP_REPORT_SUMMARY
        SET PendingToProtestable = CAST(PendingClaims as decimal) / CAST(ProtestableClaims as decimal)
    END

IF @FC + @UC > 0
    BEGIN
        UPDATE COMP_REPORT_SUMMARY
        SET WinRatioProtestable = CAST(@FC as decimal) / (CAST(@FC as decimal) + CAST(@UC as decimal))
    END

UPDATE COMP_REPORT_SUMMARY
SET BoardAppeals = (SELECT COUNT(*) FROM COMP_REPORT_DETAIL_STAGING WHERE RTRIM(BoardAppealDate) <> '')

UPDATE COMP_REPORT_SUMMARY
SET Hearings = (SELECT COUNT(*) FROM COMP_REPORT_DETAIL_STAGING WHERE RTRIM(HearingDate) <> '')

UPDATE COMP_REPORT_SUMMARY
SET PotentialLiability = (SELECT SUM(PotentialBenefitCharge) FROM COMP_REPORT_DETAIL_STAGING)

UPDATE COMP_REPORT_SUMMARY
SET LiabilityRemoved = (SELECT SUM(LiabilityRemoved) FROM COMP_REPORT_DETAIL_STAGING)

UPDATE COMP_REPORT_SUMMARY
SET LiabilityRemaining = (SELECT SUM(RemainingBenCharges) FROM COMP_REPORT_DETAIL_STAGING)

UPDATE COMP_REPORT_SUMMARY
SET TotalCharges = (SELECT      SUM(BENEFIT_CHARGES.Charges) 
            FROM         BENEFIT_CHARGES INNER JOIN
                                  CLAIMS ON BENEFIT_CHARGES.ClaimID = CLAIMS.ClaimID INNER JOIN
                                  CLIENTS ON CLAIMS.ClientID = CLIENTS.ClientID
            WHERE        (CLIENTS.ClientID > 1000) AND (CAST(CLAIMS.ClaimDate as datetime) between @Date1 AND @Date2) 
                        AND (BENEFIT_CHARGES.Charges > 0))

UPDATE COMP_REPORT_SUMMARY
SET TotalCredits = (SELECT      SUM(BENEFIT_CHARGES.Charges) 
            FROM         BENEFIT_CHARGES INNER JOIN
                                  CLAIMS ON BENEFIT_CHARGES.ClaimID = CLAIMS.ClaimID INNER JOIN
                                  CLIENTS ON CLAIMS.ClientID = CLIENTS.ClientID
            WHERE        (CLIENTS.ClientID > 1000) AND (CAST(CLAIMS.ClaimDate as datetime) between @Date1 AND @Date2) 
                        AND (BENEFIT_CHARGES.Charges < 0))


SELECT COUNT(*) AS RC FROM COMP_REPORT_DETAIL_STAGING

1 个答案:

答案 0 :(得分:0)

错误意味着您正在尝试将值放入一个大于列可容纳的表中。即您要将varchar(100)插入到已定义为varchar(80)的列中。

注释掉insert语句的insert部分,并在ssms中运行proc以确认select语句返回的内容。

希望有所帮助