TSQL变量和游标范围

TSQL变量和游标范围,tsql,cursor,sybase,Tsql,Cursor,Sybase,我想在条件变量上创建一个游标,下面是一个简短的片段: DECLARE @my_var VARCHAR(8) SET @my_var = (some value is obtained and set for @myvar) DECLARE my_cursor CURSOR FOR SELECT my_cols FROM my_table WHERE some_col < @my_var 这一点让我有点疑惑: IF(@retain_period

我想在条件变量上创建一个游标,下面是一个简短的片段:

DECLARE
  @my_var VARCHAR(8)

SET @my_var = (some value is obtained and set for @myvar)

DECLARE my_cursor CURSOR FOR
  SELECT
    my_cols
  FROM
    my_table
  WHERE
    some_col < @my_var

这一点让我有点疑惑:

IF(@retain_period > 0)
    SET @retain_period = @retain_period * -1
认为可能需要

IF @retain_period>0 THEN
    SET @retain_period=@retain_period *-1;
END IF
这可能会让事情变得混乱,并给你错误信息

编辑每天学习新知识:多行IF-THEN必须以两个单词结尾IF-in Sybase:

SET @retain_period =
(
  SELECT
    ABS(RETAIN_PERIOD) * -1
  FROM
    ARCHIVE_RETAIN_PERIOD
)

只是说。

这不是在存储过程中吗?@DavidW,你好,David,这是在存储过程中。在这种情况下,我的第一个想法是,如果您收到错误消息,您可能会遇到一些简单的错误,例如导致Sybase提前终止解析进程的打印错误,例如认为“声明游标”不在进程中,但这是一个独立的查询。也许你能发布整个过程吗?@DavidW,你好,大卫我已经发布了我遇到问题的部分代码。谢谢。你确定你不需要一个IF(条件)然后在末尾构造一个END IF吗?我使用的是Sybase,它似乎不喜欢
THEN
endif
Hmm…好了,FWIW,我从Sybase手册中得到/验证了IF-THEN和endif语法:)看看我答案的编辑,看看END-IF是否让它更快乐:)
SET @retain_period =
(
  SELECT
    ABS(RETAIN_PERIOD) * -1
  FROM
    ARCHIVE_RETAIN_PERIOD
)