Sql server 2005 在预期条件的上下文中指定的非布尔类型的表达式,靠近“Epi”

Sql server 2005 在预期条件的上下文中指定的非布尔类型的表达式,靠近“Epi”,sql-server-2005,Sql Server 2005,我正在编写一个存储过程,但当我试图执行它时,会弹出以下错误: Msg 4145, Level 15, State 1, Line 38 An expression of non-boolean type specified in a context where a condition is expected, near 'Epi'. 我已经检查了很多次代码,但仍然无法找出问题所在。我需要一双新眼睛,谢谢 SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO

我正在编写一个存储过程,但当我试图执行它时,会弹出以下错误:

Msg 4145, Level 15, State 1, Line 38
An expression of non-boolean type specified in a context where a condition is expected, near 'Epi'.
我已经检查了很多次代码,但仍然无法找出问题所在。我需要一双新眼睛,谢谢

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Rpt_Provider_GP_Monthly_Dump]
    @DateOption VARCHAR (100) = 'Service Date', -- 'Service Date' or 'Approval Date'
    @FromDate   DATETIME,
    @ToDate     DATETIME,
    @Provider   VARCHAR (100) = 'ALL'
AS
BEGIN
    SET NOCOUNT ON;

    SET @FromDate   = CONVERT(DATETIME, @FromDate , 103)
    SET @ToDate     = CONVERT(DATETIME, @ToDate , 103)

    /* Variable Declaration */
    DECLARE @SQLQuery AS NVARCHAR(2000)

    SET @SQLQuery = '
    SELECT CLM.ClaimCode, CLM.ClaimNumber, CLM.VisitAdmissionDate,
    CASE
        WHEN (MBR.SubsidiaryCode IS NULL OR MBR.SubsidiaryCode = '''') THEN MBR.ClientCode
        ELSE MBR.SubsidiaryCode
    END AS CompanyCode,
    CASE
        WHEN (MBR.SubsidiaryName IS NULL OR MBR.SubsidiaryName = '''') THEN MBR.CompanyName
        ELSE MBR.SubsidiaryName
    END AS CompanyName,
    PROV.ProviderCode, PROV.ProviderName, MBR.MemberCode, MBR.MemberName,
    CLM.OnInvoiceGrandTotal, SUM(CLM.PayByInsGrandTotal + CLM.PayExgratiaGrandTotal) AS PaidAmt, CLM.ApprovedDate,
    CASE
        WHEN CLM.IsOvrdCoInsCoPayAmt IS NULL THEN ISNULL(CLM.CoInsCoPayAmt,0)
        ELSE ISNULL(CLM.OvrdCoInsCoPayAmt,0)
    END AS CopayCoIns,
    SUM(CLM.CoverageByClientGrandTotal + CLM.CoverageByMemberGrandTotal + CLM.ExceedLimitGrandTotal + 
    CLM.DuductibleAmtGrandTotal + CLM.MemberCoInsGrandTotal + CLM.CoverageByProviderGrandTotal) AS RejectedAmt,
    CLM.DiagnosisCode, CLM.DiagnosisDescription,
    STUFF( (SELECT '', '' + A.Description FROM CLM_ClaimBenefit A
            WHERE A.BenefitType = ''DRG'' AND A.ClaimCode = CLM.ClaimCode ORDER BY A.Description
            FOR XML PATH(''''), TYPE)
    .value(''.'', ''VARCHAR(MAX)''), 1, 2, '''') AS Drug,
    ISNULL(STUFF( (SELECT '', '' + CAST(A.Qty AS VARCHAR(10)) FROM CLM_DrugFormulary A
            WHERE A.ClaimCode = CLM.ClaimCode ORDER BY A.DrugName
            FOR XML PATH(''''), TYPE)
    .value(''.'', ''VARCHAR(MAX)''), 1, 2, ''''), '''') AS Qty,
    STUFF( (SELECT '', '' + CAST((A.PayByIns + A.PayExgratia) AS VARCHAR(10)) FROM CLM_ClaimBenefit A 
            WHERE A.BenefitType = ''DRG'' AND A.ClaimCode = CLM.ClaimCode ORDER BY A.Description
            FOR XML PATH(''''), TYPE)
    .value(''.'', ''VARCHAR(MAX)''), 1, 2, '''') AS Amount,
    CLM.ClaimStatus, ISNULL(CLM.ClaimHandlerRemarks, '''') AS ClaimHandlerRemarks, CLM.CreatedBy
    FROM CLM_Claim CLM, CLM_MemberDetail MBR, CLM_ProviderDetail PROV
    WHERE MBR.ClaimCode = CLM.ClaimCode AND PROV.ClaimCode = CLM.ClaimCode
    AND CLM.ClaimClassCode = ''BC000001''
    AND CLM.ClaimStatusCode IN (2, 9, 13)
    AND CLM.ClaimTypeCode = 1
    AND CLM.EpisodeNumber = (SELECT MAX(EpisodeNumber) FROM CLM_Claim WHERE ClmNo = CLM.ClmNo)
    '

    IF (@DateOption = 'Approve')
        SET @SQLQuery = @SQLQuery + ' AND CLM.ApprovedDate BETWEEN @FromDate AND @ToDate + 1'
    ELSE    -- Visit Date
        SET @SQLQuery = @SQLQuery + ' AND CLM.VisitAdmissionDate BETWEEN @FromDate AND @ToDate + 1'

    IF (@Provider != 'ALL')
        SET @SQLQuery = @SQLQuery + ' AND PROV.ProviderCode = @Provider'

    SET @SQLQuery = @SQLQuery + ' 
    GROUP BY CLM.ClaimCode, CLM.ClaimNumber, CLM.VisitAdmissionDate, CLM.ApprovedDate,
    MBR.ClientCode, MBR.CompanyName, MBR.SubsidiaryCode, MBR.SubsidiaryName, 
    PROV.ProviderCode, PROV.ProviderName, MBR.MemberCode, MBR.MemberName, 
    CLM.OnInvoiceGrandTotal, CLM.IsOvrdCoInsCoPayAmt, CLM.OvrdCoInsCoPayAmt, CLM.CoInsCoPayAmt,
    CLM.DiagnosisCode, CLM.DiagnosisDescription, CLM.ClaimStatus, CLM.ClaimHandlerRemarks, CLM.CreatedBy
    '

PRINT @SQLQuery
    EXEC sp_executesql @SQLQuery, 
        N'@DateOption VARCHAR (100), @FromDate DATETIME, @ToDate DATETIME, @Provider VARCHAR (100)',
        @DateOption, @FromDate, @ToDate, @Provider
END
改变

DECLARE @SQLQuery AS NVARCHAR(2000)


我看不见。将引号加倍看起来还可以-我不知道EPI在单词插曲之外的什么地方存在,这是作为参数值传递的吗?您确定这是导致问题的代码位吗?当我执行PRINT@SQLQuery时,它在这部分和CLM.epiodenumber处停止。不过,移除所有这些东西效果很好。我尝试使用WHILE循环来解决这个问题。您已将SQLQuery声明为NVARCHAR2000-查询字符串是否会超过该长度?试着把它增加到4000,或者最好是NVARCHARMAX。就在现场@Bridge。就在现场!非常感谢你。
DECLARE @SQLQuery AS NVARCHAR(MAX)