【问题标题】:Msg 102, Level 15, State 1 Incorrect syntax near '>'消息 102,级别 15,状态 1 '>' 附近的语法不正确
【发布时间】:2016-10-05 21:14:19
【问题描述】:

我有一个这样的 SQL Server 过程:

//Beginning of procedure 
   SELECT 
          CASE IDNumber
                 WHEN (DATALENGTH(IDNumber)>7) 
                  THEN SUBSTRING(IDNumber,0,6)
                 WHEN (DATALENGTH(IDNumber) < 7)
                  THEN CONCAT((REPLICATE(0,7-LEN(IDNumber)),IDNumber)
          END AS NID

//Rest of the procedure here

执行代码在WHEN (DATALENGTH(IDNumber)&gt;7) 行抛出错误Incorrect syntax near '&gt;'.

IDNumbernvarchar。我尝试使用LEN(IDNumber),但徒劳无功。 我不知道错误是什么!

【问题讨论】:

  • 在 CASE 之后立即删除 IDNumber。此外,(DATALENGTH....) 周围不需要括号,但它们不会伤害任何东西。

标签: sql-server


【解决方案1】:

这样重写你的查询:

SELECT CASE 
        WHEN DATALENGTH(IDNumber) > 7 THEN SUBSTRING(IDNumber, 0, 6)
        WHEN DATALENGTH(IDNumber) < 7 THEN CONCAT(REPLICATE(0, LEN(IDNumber)), IDNumber)
    END AS NID;

当您编写CASE Column 时,您必须将其与直接值进行比较,而不是与表达式进行比较。

【讨论】:

  • REPLICATE 函数需要 2 个参数。 CONCAT(REPLICATE(0, 7, LEN(IDNumber)), IDNumber) 需要更改
  • 非常感谢。那么,我什么时候应该向 Select [column or expression] 提供表达式或列名?或者,这不是合适的方式吗?
  • @b.g 你应该只在比较相等时使用Select CASE [column or expression],比如SELECT CASE Name WHEN 'Evaldas' THEN &lt;EXP&gt; WHEN 'Muhammad' THEN &lt;EXP2&gt; END,这和SELECT CASE WHEN Name = 'Evaldas' (...)是一样的跨度>
  • @b.g Gabriel 说了什么 :)
【解决方案2】:

如果您有 case 变量,那么您需要为 When 部分提供值,而不是条件

【讨论】:

    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多