Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка SSIS и SEQUENCE  [new]
Компостеров
Member

Откуда:
Сообщений: 302
Коллеги,
кто нибудь сталкивался со следующей проблемой:


Есть таблица с ключем f_id numeric(18,0) CONSTRAINT DF_id DEFAULT NEXT VALUE FOR [f_Id] NOT NUL

При загрузке данных через SSIS выдается ошибка:
[Назначение "OLE DB" [192]] Ошибка: Код ошибки служб SSIS: DTS_E_OLEDBERROR. Возникла ошибка OLE DB. Код ошибки: 0x80004005.
Доступна запись OLE DB. Источник: "Microsoft SQL Server Native Client 11.0" Результат: 0x80004005 Описание: "Выполнение данной инструкции было прервано.".
Доступна запись OLE DB. Источник: "Microsoft SQL Server Native Client 11.0" Результат: 0x80004005 Описание: "Внимание! Произошла неустранимая ошибка 217 в фев 26 2016 1:08PM. Запомните ошибку и время, когда она произошла, и обратитесь к системному администратору.".

В логе сервера выдается сообщение:
2016-02-26 13:08:38.82 spid61 Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 2).

На таблице нет никаких триггеров.

Если ключ в таблице заменить на IDENTITY – все работает.

Как можно обойти проблему работы SSIS с SEQUENCE ?
26 фев 16, 13:22    [18867074]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SSIS и SEQUENCE  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
Версию сервера хоть озвучьте.
26 фев 16, 13:50    [18867269]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SSIS и SEQUENCE  [new]
Компостеров
Member

Откуда:
Сообщений: 302
2012 sp3
26 фев 16, 14:13    [18867460]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SSIS и SEQUENCE  [new]
msLex
Member

Откуда:
Сообщений: 8091
Компостеров
2012 sp3

а какие опции выставлены у bulk-а? Там что-то было про констрейнты.
26 фев 16, 14:31    [18867589]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Ошибка SSIS и SEQUENCE  [new]
Cane Cat Fisher
Member

Откуда:
Сообщений: 1809
Столкнулись с подобным явлением на версии 2014 SP1.

С клиента вызывается хранимая процедура, в ней формируется динамический SQL, в котором идет обращение к NEXT VALUE SEQUENCE. То есть уровней вложенности кот наплакал, никакой рекурсии. И вот иногда, нерегулярно, может один на тысячу раз, выдается ошибка:

Warning: Fatal error 217 occurred at %дата%. Note the error and time, and contact your system administrator.

В логе пишется:

No Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 2).

В скобках именно (limit 2), а не 32, как бывает обычно при превышении уровня вложенности.

Кто сталкивался? Кто знает, как побороть?
27 ноя 17, 23:19    [20987168]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SSIS и SEQUENCE  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
Ну, в try/catch с ретраем оберните, если уверены, что нигде глуюину рекурсии не ограничиваете.
28 ноя 17, 01:26    [20987247]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SSIS и SEQUENCE  [new]
Cane Cat Fisher
Member

Откуда:
Сообщений: 1809
Ответ нашелся.

Дело в том, что системе, в совершенно другом месте, в одном из отчетов, программисты влепили опцию SET ROWCOUNT 100000, а обратно в 0 вернуть забыли.

И если пользователь в ходе работы делал этот отчет, а затем возвращался к добавлению записей, где идет обращение к SEQUENCE, то получал ошибку.

Дело в том, что согласно документации, обращение к SEQUENCE (NEXT VALUE FOR...) не работает, если установлено SET ROWCOUNT:

Limitations and Restrictions
The NEXT VALUE FOR function cannot be used in the following situations:

  • In a statement using TOP, OFFSET, or when the ROWCOUNT option is set.


  • А подлость в том, что у старых SQL-серверов в этой ситуации выдается ошибочное сообщение об ошибке.

    Скрипт для воспроизведения:

    set rowcount 0;
    create sequence SEQ_TEST start with 1;
    select next value for SEQ_TEST; -- 1
    set rowcount 1000;
    select next value for SEQ_TEST; -- Error
    


    Сравните выполнение на разных версиях:

    Сообщение об ошибке нормального сервера:

    Microsoft SQL Server 2014 - 12.0.2269.0 (X64)
    NEXT VALUE FOR function cannot be used if ROWCOUNT option has been set, or the query contains TOP or OFFSET.


    Сообщение об ошибке курильщика:

    Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
    Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 2).
    14 дек 17, 12:07    [21033160]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка SSIS и SEQUENCE  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 6801
    Cane Cat Fisher,

    уровень совместимости стоит 100
    14 дек 17, 12:51    [21033328]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка SSIS и SEQUENCE  [new]
    Yasha123
    Member

    Откуда:
    Сообщений: 1833


    К сообщению приложен файл. Размер - 14Kb
    14 дек 17, 12:57    [21033353]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка SSIS и SEQUENCE  [new]
    TaPaK
    Member

    Откуда: Kiev
    Сообщений: 6801
    Yasha123,
    при совместимости 100 и меньше валится в хлам. 110+ NEXT VALUE FOR function cannot be used if ROWCOUNT option has been set, or the query contains TOP or OFFSET.
    14 дек 17, 13:01    [21033377]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка SSIS и SEQUENCE  [new]
    Yasha123
    Member

    Откуда:
    Сообщений: 1833
    да.
    это именно на базе с совместимостью 100
    14 дек 17, 13:10    [21033407]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить