我的查询在SQL Server 2017中有效,但在SQL Server 2014中无效

时间:2018-12-13 15:39:52

标签: sql ssms sql-server-2014

我正在尝试替换固定的定界列表中的值,并且我知道这违反规范。但是我别无选择。我编写了一个查询,该查询替换定界列表中的值,并且如果我尝试替换的值已经存在,则避免重复。

我的查询在SQL Server 2017中工作正常,但在SQL Server 2014中不工作。我收到一条错误消息。我需要此查询才能在SQL Server 2014中使用。我非常感谢。我的查询与小提琴执行链接一起在下面给出。错误消息是

  

消息156级别15状态1的第4行
  关键字“ FROM”附近的语法不正确。

     

信息102的15级状态1线14
  “输入”附近的语法不正确。

     

消息102的15级状态1行23
  “替换”附近的语法不正确。

https://dbfiddle.uk/rdbms=sqlserver_2014&fiddle=9eb71e1e90b07c8c150004dc9a6d5107

UPDATE test
SET appValue = TRIM(',' FROM REPLACE(inputs.expression, inputs.pattern, replacement.value))
FROM test
CROSS APPLY
    (SELECT
         ',' + appValue + ','  AS expression,
         ',' + '406'    + ','  AS pattern,
         ',' + '506'    + ','  AS replacement
    ) inputs
CROSS APPLY
    (SELECT
         CASE 
            WHEN inputs.expression LIKE '%' + inputs.replacement + '%'
               THEN ','
               ELSE inputs.replacement
         END) replacement(value)
WHERE
    inputs.expression LIKE '%' + inputs.pattern + '%'

1 个答案:

答案 0 :(得分:2)

TRIM() function是Sql Server 2017的新功能。对于较旧版本的Sql Server,您必须使用较旧的LTRIM()RTRIM()函数,它们没有相同的{{ 1}}语法,或其他更复杂的字符串函数,例如characters FROM stringCHARINDEX()

最简单的方法可能是SUBSTRING()所有带有特殊字符的空格(您知道该空格都不属于数据的一部分),然后REPLACE()带有空格的所有逗号,使用旧的{{ 1}} / REPLACE()函数,LTRIM()空格再次回到逗号,而RTRIM()特殊字符回到空格。

REPLACE()

或者,如果您知道可能只有一个多余的尾随或前导逗号,则可以对此进行测试,然后使用SUBSTRING()删去该字符。