【问题标题】:SQL Server Migration Assistant for Access - Incorrect syntax near '<'用于 Access 的 SQL Server 迁移助手 - '<' 附近的语法不正确
【发布时间】:2012-01-06 01:29:03
【问题描述】:

我正在尝试将此查询从 Access 迁移到 SQL Server 中的视图:

CREATE VIEW dbo.[2010Q1-Q2 BLABSI Rate by Hospitalstep1]
AS
   SELECT 
      [AcuteHospitals].[HospitalName], 
      [SummaryYQ_LOV].[SummaryYQ], 
      Sum([RateTable_CLABData].[clabcount]) AS [Number of CLABSI], 
      Sum([RateTable_CLABData].[numcldays]) AS [Central Line Days], 
      (CASE 
         WHEN [AcuteHospitals].[LicensedBeds] < '201' THEN 'a'
         ELSE (CASE 
            WHEN [AcuteHospitals].[LicensedBeds] > '500' THEN 'c'
            ELSE 'b'
         END)
      END) AS SizeCat, 
      (CASE 
         WHEN [AcuteHospitals].[LicensedBeds] < '201' THEN '<200 Licensed Beds'
         ELSE (CASE 
            WHEN [AcuteHospitals].[LicensedBeds] > '500' THEN '>500 Licensed Beds'
            ELSE '201-500 Licensed Beds'
         END)
      END) AS BedSize
   FROM 
      ([AcuteHospitals] 
         LEFT JOIN [RateTable_CLABData] 
         ON [AcuteHospitals].[NHSN_ID] = [RateTable_CLABData].[orgID]) 
         LEFT JOIN [SummaryYQ_LOV] 
         ON [RateTable_CLABData].[summaryYQ] = [SummaryYQ_LOV].[StartDate]
   WHERE ((([RateTable_CLABData].[loccdc]) NOT LIKE '%ped%'))
   GROUP BY [AcuteHospitals].[HospitalName], [SummaryYQ_LOV].[SummaryYQ], (
      CASE 
         WHEN [AcuteHospitals].[LicensedBeds] < '201' THEN 'a'
         ELSE (
            CASE 
               WHEN [AcuteHospitals].[LicensedBeds] > '500' THEN 'c'
               ELSE 'b'
            END)
      END), (
      CASE 
         WHEN  < '201' THEN '≤200 Licensed Beds'
         ELSE (
            CASE 
               WHEN  > '500' THEN '>500 Licensed Beds'
               ELSE '201-500 Licensed Beds'
            END)
      END)

GO

但我不断收到关于“

实际上有 4 行,如 [AcuteHospitals].[LicensedBeds] &lt; '201' THEN,但 SSMA 并没有指出错误在哪一行,因为我假设它是第一个实例,因为每一行基本上都是相同的。

【问题讨论】:

    标签: sql-server ms-access


    【解决方案1】:

    如果[AcuteHospitals].[LicensedBeds] 是数字列,则不应将其与字符串值进行比较:

    使用

    [AcuteHospitals].[LicensedBeds] < 201
    

    而不是

    [AcuteHospitals].[LicensedBeds] < '201'
    

    Access 比 SQL Server 对这类事情更宽容。

    【讨论】:

    • 如果 LicensedBeds 是数字,SQL 将隐式地将“201”转换为正确的类型。
    【解决方案2】:

    我从您发布的 sn-p 中看到的一些事情。

    1) 你有两个左括号,但只有一个右括号。这可能与您的错误有关。实际上,您不需要在 CASE 语句周围加上任何括号。

    2) 您可以将 CASE 语句简化为以下内容。

    CASE 
        WHEN [AcuteHospitals].[LicensedBeds] < '201' THEN 'a'
        WHEN [AcuteHospitals].[LicensedBeds] > '500' THEN 'c'
        ELSE 'b'
    END
    

    但是,如果没有查看整个查询,我无法确定这是您错误的原因。

    编辑

    问题在于您的GROUP BY&lt;&gt; 需要一个左手操作数

      CASE 
         WHEN  < '201' THEN '≤200 Licensed Beds'
         ELSE (
            CASE 
               WHEN  > '500' THEN '>500 Licensed Beds'
               ELSE '201-500 Licensed Beds'
            END)
      END)
    

    【讨论】:

    • 我刚刚添加了整个查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2017-07-15
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多