我的查询适用于SQL Server 2017,但它在SQL Server 2014中不起作用

问题描述 投票:0回答:1

我试图替换我坚持使用的分隔列表中的值,我知道它违反了规范化。但是我别无选择。我编写了一个查询来替换分隔列表中的值,并避免重复,如果我试图替换它的值已经存在。

我的查询在SQL Server 2017中运行得很好,但它在SQL Server 2014中不起作用。我收到一条错误消息。我需要此查询在SQL Server 2014中工作。我会非常感激。下面给出了我的查询以及小提琴执行链接。错误消息是

Msg 156 Level 15 State 1 Line 4 关键字“FROM”附近的语法不正确。

Msg 102 Level 15 State 1 Line 14 “输入”附近的语法不正确。

Msg 102 Level 15 State 1 Line 23 'replacement'附近的语法不正确。

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 + '%'
sql ssms sql-server-2014
1个回答
2
投票

TRIM() function是Sql Server 2017的新版本。对于旧版本的Sql Server,您必须使用较旧的LTRIM()RTRIM()函数,这些函数不具有相同的characters FROM string语法,或其他更复杂的字符串函数,如CHARINDEX()SUBSTRING()

最简单的事情可能是REPLACE()所有具有特殊字符的空间,你知道它不是你的数据的一部分,然后REPLACE()所有逗号都有空格,使用旧的LTRIM() / RTRIM()函数修剪空格,REPLACE()空格再回到逗号,和REPLACE()特殊的角色回到空间。

REPLACE(REPLACE(RTRIM(LTRIM(REPLACE(REPLACE(column, ' ', '|'), ',', ' '))), ' ', ','), '|', ' ')

或者如果您知道可能只有一个额外的尾随或前导逗号,您可以测试它并使用SUBSTRING()来剪切该字符。

© www.soinside.com 2019 - 2024. All rights reserved.