请帮忙纠正这个游标SQL

时间:2016-11-10 07:48:23

标签: sql-server tsql cursor

 DECLARE @abc varchar(MAX);
 DECLARE @useIPDTaskDeadline INT = 1;

 DECLARE TOCREATETASKCURSOR CURSOR FOR      
       WITH TOTALTASK AS (
            SELECT  abc FROM table1
       )
       SELECT abc FROM TOTALTASK

FOR READ ONLY

OPEN TOCREATETASKCURSOR
FETCH TOCREATETASKCURSOR INTO @abc

WHILE @@FETCH_STATUS = 0
BEGIN -- @@FETCH_STATUS = 0
    PRINT ''

    BEGIN TRANSACTION;

    IF (@useIPDTaskDeadline = 1) 
        PRINT 'Updates completed';
END

IF (@useIPDTaskDeadline = 0) 
    PRINT 'Updates completed';
END;

COMMIT TRANSACTION;

    FETCH TOCREATETASKCURSOR INTO @abc
END -- @@FETCH_STATUS = 0

CLOSE TOCREATETASKCURSOR
DEALLOCATE TOCREATETASKCURSOR

这会引发错误:

  

Msg 102,Level 15,State 1,Line 117
  ';'附近的语法不正确。

     

第156行,第15级,第1行,第126行   关键字'CLOSE'附近的语法不正确。

请告诉我什么是不正确的?我已经尝试了很多,但无法使它工作。 IF else语法有问题吗?我正在使用SQL Server。

我尝试了很多if else语法,但无法使其正常工作。

2 个答案:

答案 0 :(得分:3)

IF (@useIPDTaskDeadline = 1)
BEGIN
  PRINT 'Updates completed';
END
IF (@useIPDTaskDeadline = 0)
BEGIN
 PRINT 'Updates completed';
END

如果您没有使用 BEGIN 结束正确

,则会出现问题

答案 1 :(得分:1)

您必须在END阻止后删除IF语句(或添加BEGIN语句):

IF (@useIPDTaskDeadline = 1) 
    PRINT 'Updates completed';
IF (@useIPDTaskDeadline = 0) 
    PRINT 'Updates completed';

IF (@useIPDTaskDeadline = 1)
BEGIN
    PRINT 'Updates completed';
END
IF (@useIPDTaskDeadline = 0)
BEGIN
    PRINT 'Updates completed';
END