这个case语句的语法有什么问题?

时间:2016-01-07 14:57:15

标签: sql sql-server

我正在尝试通过游标将值插入临时表,如果它们最后有句号,我想删除句点。这是我遇到语法问题的代码。

WHILE @@FETCH_STATUS = 0
BEGIN
    CASE SELECT CHARINDEX('.',REVERSE(@Category))  
        WHEN 1
        THEN INSERT INTO #Category VALUES (SUBSTRING(@Category,1,LEN(@Category)-1)))
END;

我在这里做错了什么?我对更有效的答案持开放态度,但也想知道如何以这种方式解决问题。

2 个答案:

答案 0 :(得分:3)

CASE产生一个表达式,而不是语句。您正在寻找IF statement

至于更好的方法:废弃光标并使用INSERT INTO ... SELECT ... WHERE CHARINDEX('.', REVERSE(category)) = 1语句。

答案 1 :(得分:3)

CASE用于计算表达式,而不是控制程序流。请改用IF

WHILE @@FETCH_STATUS = 0
BEGIN
    IF CHARINDEX('.',REVERSE(@Category)) = 1
        INSERT INTO #Category VALUES (SUBSTRING(@Category,1,LEN(@Category)-1)))
END;

虽然如果从游标中的表达式计算@Category,那么您可以通过使用INSERT INTO而不是循环并执行单个INSERT语句来看到显着改进。