我正在尝试通过游标将值插入临时表,如果它们最后有句号,我想删除句点。这是我遇到语法问题的代码。
WHILE @@FETCH_STATUS = 0
BEGIN
CASE SELECT CHARINDEX('.',REVERSE(@Category))
WHEN 1
THEN INSERT INTO #Category VALUES (SUBSTRING(@Category,1,LEN(@Category)-1)))
END;
我在这里做错了什么?我对更有效的答案持开放态度,但也想知道如何以这种方式解决问题。
答案 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
语句来看到显着改进。