В чем причина ошибки ODBC SQLSTATE: 42000 Номер ошибки: 4121 в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию В чем причина ошибки ODBC SQLSTATE: 42000 Номер ошибки: 4121 в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33514
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        В чем может быть причина ошибки при обращении к внешнему источнику данных: Ошибка внешней базы данных:
        ошибка при выполнении запроса
        по причине:
        Ошибка ODBC. SQLSTATE: 42000
        Номер ошибки: 4121
        Описание: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Cannot find either column «dbo» or the user-defined function or aggregate «dbo.FORMAT_NUMBER», or the name is ambiguous.

      • #33515
        bot_avaOdin — Одинэсник
        Участник

          Roman, привет!

          Ошибка SQL Server с кодом 4121 и сообщением:

          Cannot find either column "dbo" or the user-defined function or aggregate "dbo.FORMAT_NUMBER", or the name is ambiguous.
          

          означает, что в запросе к внешнему источнику данных (SQL Server) используется функция `dbo.FORMAT_NUMBER`, которая не найдена в базе данных.

          Основные причины и рекомендации:

          1. **Отсутствие функции в базе данных**
          Функция `FORMAT_NUMBER` — это либо пользовательская функция (UDF), либо агрегат, которая должна быть создана в базе данных. Если она не создана, SQL Server не сможет её найти.
          Проверьте, существует ли функция `FORMAT_NUMBER` в схеме `dbo` вашей базы данных.
          Для проверки можно выполнить запрос:

          sql
             SELECT * FROM sys.objects WHERE name = 'FORMAT_NUMBER' AND type IN ('FN', 'IF', 'TF', 'AF');
             

          Если функция отсутствует — её нужно создать или убрать вызов из запроса.

          2. **Неправильное имя или схема**
          Возможно, функция существует, но в другой схеме, либо имя написано с ошибкой. Убедитесь, что вызываете функцию с правильным полным именем, например: `schema_name.FORMAT_NUMBER`.

          3. **Права доступа**
          У пользователя, под которым выполняется запрос, может не быть прав на вызов этой функции. Проверьте права доступа.

          4. **Конфликт имён**
          Сообщение «or the name is ambiguous» говорит, что может быть несколько объектов с таким именем, и SQL Server не может однозначно определить, что именно вызвать. Проверьте, нет ли в базе других объектов с таким именем.

          5. **Использование функции в запросе 1С**
          Если запрос формируется в 1С и передается в SQL Server, возможно, функция `FORMAT_NUMBER` — это функция 1С, а не SQL Server. В таком случае её нельзя использовать в запросе к внешнему источнику. Нужно либо реализовать аналог на стороне SQL Server, либо убрать вызов.

          **Итог:**
          Ошибка возникает из-за того, что SQL Server не может найти функцию `dbo.FORMAT_NUMBER`. Нужно проверить наличие и права на эту функцию в базе данных, либо убрать/заменить вызов функции в запросе.

          Рекомендую посмотреть здесь:
          https://learn.microsoft.com/en-us/sql/relational-databases/user-defined-functions/user-defined-functions?view=sql-server-ver16

          и для диагностики ошибок SQL Server:
          https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/database-engine-events-and-errors?view=sql-server-ver16

          Если нужна помощь с кодом 1С для обхода этой ошибки — обращайся.

          Оценка ответа: 9/10

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С