Нужна помощь по использованию курсора и отображению записей на сервере SQL Ошибка: сообщение 16916, уровень 16, состояние 1 - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь отобразить записи из определенной таблицы с помощью курсора.Но он выдает эту ошибку.

Сообщение 16916, Уровень 16, Состояние 1, Тестовая загрузка процедуры, Строка 26 [Стартовая Строка 1 Строка] *
Курсор с именем 'ShowSDFinfo' не существует.

Сообщение 16916, Уровень 16, Состояние 1, Тестовая загрузка процедуры, Строка 40 [Стартовая Строка 1 Строка] *
Курсор с именем 'ShowSDFinfo' не существует.

Сообщение 16916,Уровень 16, Состояние 1, Тестовая нагрузка процедуры, Строка 62 [Стартовая Строка 1]
Курсор с именем 'ShowSDFinfo' не существует.

Сообщение 16916, Уровень 16, Состояние 1, Тестовая загрузка процедуры,Строка 63 [Batch Start Line 1]
Курсор с именем 'ShowSDFinfo' не существует.

Код:

CREATE OR ALTER PROCEDURE testload
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @VantiveOrgID1 VARCHAR(12),
            @VantiveCustomerName1 VARCHAR(12),
            @Sector1 VARCHAR(12)

    --DECLARE AND SET COUNTER.
    DECLARE @Counter INT
    SET @Counter = 1

    --DECLARE THE CURSOR FOR A QUERY.
    DECLARE ShowSFDinfo CURSOR STATIC LOCAL READ_ONLY FOR
        SELECT
            [Vantive OrgID],
            [Vantive Customer Name],                        
            [Sector]                
        FROM 
            [dbo].[SCASalesOrderExport_20180416] WITH (nolock)
        WHERE 
            date >= '1/1/18'
        ORDER BY
           date DESC;

   --OPEN CURSOR.
   OPEN ShowSDFinfo;

   --FETCH THE RECORD INTO THE VARIABLES.
   FETCH NEXT FROM ShowSDFinfo INTO @VantiveOrgID1, @VantiveCustomerName1, @Sector1

       --LOOP UNTIL RECORDS ARE AVAILABLE.

     WHILE @@FETCH_STATUS = 0
        BEGIN
            IF @Counter = 1
                BEGIN
             SELECT @@CURSOR_ROWS

                END

             FETCH NEXT FROM ShowSDFinfo INTO
@VantiveOrgID1
,@VantiveCustomerName1
,@Sector1

        END

           CLOSE ShowSDFinfo
   DEALLOCATE ShowSDFinfo

END

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вместо курсора попробуйте использовать ниже.это будет быстрее, чем курсор для 8 миллионов строк.

CREATE OR ALTER PROCEDURE testload
AS
BEGIN
    SET NOCOUNT ON;

  CEATE TABLE #TEMP ( ID INT IDENTITY(1,1),
    VantiveOrgID VARCHAR(12),
     VantiveCustomerName VARCHAR(12),
     Sector VARCHAR(12)

 DECLARE @cOUNT INT
DECLARE @I INT = 1


        SELECT
            [Vantive OrgID],
            [Vantive Customer Name],                        
            [Sector] 
        INTO #TEMP               
        FROM 
            [dbo].[SCASalesOrderExport_20180416] WITH (nolock)
        WHERE 
            date >= '1/1/18'
        ORDER BY
           date DESC;

SELECT @cOUNT = COUNT(*) FROM #TEMP

     WHILE (@I<=@cOUNT)
        BEGIN
            YOUR CODE 


END
0 голосов
/ 18 мая 2018

ShowSDFinfo и ShowSFDinfo - это разные имена курсоров!

DECLARE ShowSFDinfo CURSOR static local read_only 
  FOR..

и

DEALLOCATE ShowSDFinfo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...