Sql error: @@ERROR (Transact-SQL) — SQL Server

Содержание

@@ERROR (Transact-SQL) — SQL Server

  • Статья
  • Чтение занимает 3 мин
  • Участники: 3

Были ли сведения на этой странице полезными?

Да Нет

Хотите оставить дополнительный отзыв?

Отзывы будут отправляться в корпорацию Майкрософт.

Нажав кнопку «Отправить», вы разрешаете использовать свой отзыв для улучшения продуктов и служб Майкрософт. Политика конфиденциальности.

Отправить

В этой статье

Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Параллельное хранилище данных

Возвращает номер ошибки для последней выполненной инструкции Transact-SQL.

Синтаксические обозначения в Transact-SQL

Синтаксис

@@ERROR  

Типы возвращаемых данных

Целое число

Примечания

Возвращает 0, если в предыдущей инструкции Transact-SQL не возникло ошибок.

Возвращает номер ошибки, если в предыдущей инструкции возникла ошибка. Если ошибка относится к представлению каталога sys.messages, @@ERROR содержит значение столбца sys.messages.message_id для этой ошибки. Текст, связанный с номером ошибки @@ERROR, можно просмотреть в sys.messages.

Так как функция @@ERROR очищается и сбрасывается для каждой выполняемой инструкции, проверяйте ее сразу после инструкции или сохраните значение в локальной переменной для последующей проверки.

Для обработки ошибок используйте конструкцию TRY…CATCH. Конструкция TRY…CATCH также поддерживает дополнительные системные функции (ERROR_LINE, ERROR_MESSAGE, ERROR_PROCEDURE, ERROR_SEVERITY и ERROR_STATE), возвращающие более подробные сведения, чем @@ERROR. Кроме того, TRY…CATCH поддерживает функцию ERROR_NUMBER, которая не ограничена тем, что возвращает номер ошибки немедленно после выполнения инструкции. Дополнительные сведения см. в разделе TRY…CATCH (Transact-SQL).

Примеры

A. Использование функции @@ERROR для обнаружения конкретной ошибки

В следующем примере функция @@ERROR используется для проверки проверочного ограничения (ошибка 547) в инструкции

UPDATE.

USE AdventureWorks2012;  
GO  
UPDATE HumanResources.EmployeePayHistory  
    SET PayFrequency = 4  
    WHERE BusinessEntityID = 1;  
IF @@ERROR = 547
    BEGIN
    PRINT N'A check constraint violation occurred.';
    END
GO  

Б. Использование функции @@ERROR для выхода из процедуры по условию

В приведенном ниже примере инструкции IF...ELSE выполняют проверку @@ERROR после инструкции DELETE в хранимой процедуре. Значение переменной @@ERROR определяет код возврата, который отправляется вызывающей программе и указывает на успешное или неуспешное выполнение процедуры.

USE AdventureWorks2012;  
GO  
-- Drop the procedure if it already exists.  
IF OBJECT_ID(N'HumanResources.usp_DeleteCandidate', N'P') IS NOT NULL  
    DROP PROCEDURE HumanResources.usp_DeleteCandidate;  
GO  
-- Create the procedure.  
CREATE PROCEDURE HumanResources.usp_DeleteCandidate   
    (  
    @CandidateID INT  
    )  
AS  
-- Execute the DELETE statement.  
DELETE FROM HumanResources.JobCandidate  
    WHERE JobCandidateID = @CandidateID;  
-- Test the error value.  
IF @@ERROR <> 0   
    BEGIN  
        -- Return 99 to the calling program to indicate failure.  
        PRINT N'An error occurred deleting the candidate information.';  
        RETURN 99;  
    END  
ELSE  
    BEGIN  
        -- Return 0 to the calling program to indicate success.  
        PRINT N'The job candidate has been deleted.';  
        RETURN 0;  
    END;  
GO  

В. Использование @@ERROR с @@ROWCOUNT

В следующем примере инструкция @@ERROR с @@ROWCOUNT используется для проверки операции инструкции UPDATE. Значение @@ERROR проверяется на ошибки, а @@ROWCOUNT обеспечивает успешное применение обновления к строке таблицы.

USE AdventureWorks2012;  
GO  
IF OBJECT_ID(N'Purchasing.usp_ChangePurchaseOrderHeader',N'P')IS NOT NULL  
    DROP PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader;  
GO  
CREATE PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader  
    (  
    @PurchaseOrderID INT  
    ,@BusinessEntityID INT  
   )  
AS  
-- Declare variables used in error checking.  
DECLARE @ErrorVar INT;  
DECLARE @RowCountVar INT;  
  
-- Execute the UPDATE statement.  
UPDATE PurchaseOrderHeader   
    SET BusinessEntityID = @BusinessEntityID   
    WHERE PurchaseOrderID = @PurchaseOrderID;  
  
-- Save the @@ERROR and @@ROWCOUNT values in local   
-- variables before they are cleared.  
SELECT @ErrorVar = @@ERROR  
    ,@RowCountVar = @@ROWCOUNT;  
  
-- Check for errors. If an invalid @BusinessEntityID was specified,  
-- the UPDATE statement returns a foreign key violation error #547.  
IF @ErrorVar <> 0  
    BEGIN  
        IF @ErrorVar = 547  
            BEGIN  
                PRINT N'ERROR: Invalid ID specified for new employee.';  
                 RETURN 1;  
            END  
        ELSE  
            BEGIN  
                PRINT N'ERROR: error '  
                    + RTRIM(CAST(@ErrorVar AS NVARCHAR(10)))  
                    + N' occurred.';  
                RETURN 2;  
            END  
    END  
  
-- Check the row count. @RowCountVar is set to 0   
-- if an invalid @PurchaseOrderID was specified.  
IF @RowCountVar = 0  
    BEGIN  
        PRINT 'Warning: The BusinessEntityID specified is not valid';  
        RETURN 1;  
    END  
ELSE  
    BEGIN  
        PRINT 'Purchase order updated with the new employee';  
        RETURN 0;  
    END;  
GO  

См. также:

TRY…CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
@@ROWCOUNT (Transact-SQL)
sys.messages (Transact-SQL)
Справочник по ошибкам и событиям (компонент Database Engine)

ERROR_MESSAGE (Transact-SQL) — SQL Server

  • Статья
  • Чтение занимает 2 мин
  • Участники: 3

Были ли сведения на этой странице полезными?

Да Нет

Хотите оставить дополнительный отзыв?

Отзывы будут отправляться в корпорацию Майкрософт. Нажав кнопку «Отправить», вы разрешаете использовать свой отзыв для улучшения продуктов и служб Майкрософт. Политика конфиденциальности.

Отправить

В этой статье

Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Параллельное хранилище данных

Эта функция возвращает текст сообщения об ошибке, которая вызвала выполнение блока CATCH конструкции TRY…CATCH.

Синтаксические обозначения в Transact-SQL

Синтаксис

ERROR_MESSAGE ( )   

Типы возвращаемых данных

nvarchar(4000)

Возвращаемое значение

При вызове в блоке CATCH функция ERROR_MESSAGE возвращает полный текст сообщения об ошибке, запустившей блок CATCH. Текст содержит значения подставляемых параметров, таких как длина, имена объектов или время.

Функция ERROR_MESSAGE возвращает значение NULL в случае вызова вне блока CATCH.

Remarks

Функцию ERROR_MESSAGE можно вызывать в любом месте области действия блока CATCH.

Функция ERROR_MESSAGE возвращает соответствующее сообщение об ошибке независимо от количества ее выполнений или от места ее вызова в области действия блока CATCH. В этом ее отличие от таких функций, как @@ERROR, которые возвращают номер ошибки только в той инструкции, которая непосредственно следует за инструкцией, вызвавшей ошибку.

Во вложенных блоках CATCH функция ERROR_MESSAGE возвращает сообщение об ошибке, соответствующее области действия блока CATCH, который ссылался на данный блок CATCH. Например, блок CATCH внешней конструкции TRY…CATCH может содержать внутреннюю конструкцию TRY...CATCH. Во внутреннем блоке

CATCH функция ERROR_MESSAGE возвращает сообщение об ошибке, вызвавшей внутренний блок CATCH. Если функция ERROR_MESSAGE выполняется во внешнем блоке CATCH, она возвращает сообщение об ошибке, вызвавшей внешний блок CATCH.

Примеры

A. Использование функции ERROR_MESSAGE в блоке CATCH

В приведенном ниже примере показана инструкция SELECT, вызывающая ошибку деления на ноль. Блок CATCH возвращает сообщение об ошибке.

BEGIN TRY  
    -- Generate a divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

Результирующий набор:

-----------

(0 row(s) affected)

ErrorMessage
----------------------------------
Divide by zero error encountered.

(1 row(s) affected)

Б. Использование функции ERROR_MESSAGE в блоке CATCH с другими средствами обработки ошибок

В приведенном ниже примере показана инструкция SELECT, вызывающая ошибку деления на ноль. Вместе с сообщением об ошибке блок

CATCH возвращает сведения о ней.

BEGIN TRY  
    -- Generate a divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT  
        ERROR_NUMBER() AS ErrorNumber  
        ,ERROR_SEVERITY() AS ErrorSeverity  
        ,ERROR_STATE() AS ErrorState  
        ,ERROR_PROCEDURE() AS ErrorProcedure  
        ,ERROR_LINE() AS ErrorLine  
        ,ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

Результирующий набор:

-----------

(0 row(s) affected)

ErrorNumber ErrorSeverity ErrorState  ErrorProcedure  ErrorLine  ErrorMessage
----------- ------------- ----------- --------------- ---------- ----------------------------------
8134        16            1           NULL            4          Divide by zero error encountered.

(1 row(s) affected)

См. также:

sys.messages (Transact-SQL)
TRY…CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
Справочник по ошибкам и событиям (компонент Database Engine)

Проблемы с подключением к SQL Server [BS Docs 5]

Вопрос:

Возникают проблемы при подключении к SQL Server, при этом в сообщении об ошибке встречается фрагмент:

  1. «Ошибка подключения к серверу SQL»;
  2. «Ошибка подключения к экземпляру сервера SQL»;
  3. «При установлении соединения с SQL Server произошла ошибка, связанная с сетью или определенным экземпляром. Сервер не найден или недоступен»;
  4. «Error 26»;

  5. «Error: 40».

Что можно сделать для решения таких проблем?

Ответ:

Для устранения проблемы попробуйте воспользоваться приведенной ниже инструкцией.

Инструкция по устранению наиболее часто возникающих проблем с подключением к SQL Server

1) Проверьте, что имя сервера задано верно (в частности, если компьютер был переименован):

Также проверьте, что имя экземпляра (в данном случае – SQLEXPRESS) задано верно. При необходимости допишите его вручную в поле «Сервер баз данных». Примечание. Если SQL Server был установлен автоматически при установке Business Studio, то имя экземпляра должно быть SQLEXPRESS.

2) Если сервер SQL находится не на локальном компьютере, то проверьте, что компьютер включен и подключен к сети.

3) Проверьте, что SQL Server запущен и настроен верно. Далее приведен пример для SQL Server 2014 (подходит и для других версий SQL Server, начиная с 2008)1):

a. Откройте Пуск->Все программы->Microsoft SQL Server 2014->Диспетчер конфигурации SQL Server 2014.

b. Проверьте, что запущена служба SQL Server (на скриншоте пример для экземпляра SQLEXPRESS), т.е. что она находится в состоянии «Работает»:

c. Проверьте, что запущена служба обозревателя SQL Server (SQL Server Browser), т.е. что она находится в состоянии «Работает»:

d. Проверьте, что удаленные соединения разрешены, т.е. что состояние протоколов «Именованные каналы» и «TCP/IP» для рассматриваемого экземпляра SQL Server – «Включено»:

4) Проверьте, что никакие брандмауэры на компьютере с сервером SQL не блокируют соединение со службой SQL. То же касается и антивирусов, т.к. некоторые из них имеют функции брандмауэров. Обратитесь к документации по этим средствам. Для проверки можно временно отключить их. Далее приведен пример для встроенного брандмауэра Windows 7:

a. Откройте Пуск->Панель управления->Брандмауэр Windows, перейдите на закладку «Разрешить запуск программы или компонента через брандмауэр Windows» (для Windows 10 необходимо вызвать контекстное меню правой кнопкой мыши от кнопки «Пуск»->Сетевые подключения->Брандмауэр Windows->Брандмауэр и безопасность сети->Разрешить работу с приложением через брандмауэр) и нажмите кнопку «Изменить параметры».

b. Добавьте следующие программы, как показано на рисунке (повторив поз. 1-3 для каждой из программ)2):

  • C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Binn\sqlservr.exe (служба SQL Server)
  • C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe (cлужба обозревателя SQL Server)


c. Перезапустите вышеуказанные службы.

5) Если ничего не помогает, то, возможно, имеются проблемы с разрешением сетевых имен. Попробуйте указать вместо имени компьютера его IP-адрес. Это можно сделать в окне выбора базы данных по нажатию кнопки «Свойства». Например, так:

В случае локального сервера SQL укажите IP-адрес 127.0.0.1, в случае удаленного – узнайте у администратора сети.

MySQL error 1064 — статьи sqlinfo.ru

Дата: 25.11.2013

Автор: Василий Лукьянчиков , vl (at) sqlinfo (dot) ru

Статья ориентирована на новичков. В ней объясняется, что означает ошибка сервера MySQL №1064, рассматриваются типичные ситуации и причины возникновения этой ошибки, а также даются рекомендации по исправлению.

Рассмотрим простейший пример.

SELECT mid, time, title, artist, download, view_count, rating, vote_num FROM dle_mservice WHERE category = ‘1’ AND approve = ‘1’ ORDER BY time DESC LIMIT -10,10;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘-10,10’ at line 1

Сервер MySQL сообщает, что в первой строке нашего SQL запроса имеется синтаксическая ошибка, и в одинарных кавычках цитирует часть запроса с того места где начинается ошибка. Это очень полезное свойство, так как позволяет сразу определить место, которое сервер счел ошибочным. В данном случае это ‘-10,10’, ошибка возникает из-за того, что параметр LIMIT не может быть отрицательным числом.

Однако, бывает и так, что цитируемый кусок запроса не содержит синтаксической ошибки. Это означает, что данная часть запроса находится не на своем месте из-за чего весь запрос становится синтаксически неверным. Например, отсутствует разделитель между двумя запросами, пропущен кусок запроса, невидимый символ в дампе и т.д. Неудобством таких ситуаций является то, что сообщение об ошибке не содержит исходный запрос. Действия по исправлению зависят от контекста возникновения ошибки. Таковых всего 3:

1. Запрос в редакторе.

Самый простейший случай — вы пишите свой запрос в редакторе. Если причина не опечатка, то:

  • Смотреть в документации синтаксис команды для вашей версии сервера MySQL.
    Обратите внимание: речь идет о версии сервера MySQL, а не клиента (phpmyadmin, workbench и т.д.). Версию сервера можно узнать выполнив команду select version();
  • В MySQL допускается использование ключевых слов в качестве имен столбцов/таблиц, но при этом их необходимо заключать в обратные кавычки (там где буква ё на клавиатуре). Пример:

    select order from test;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘order from test’ at line 1
    MariaDB [test]> select `order` from test;
    +——-+
    | order |
    +——-+
    |  NULL |
    +——-+

  • По умолчанию ; разделяет команды. Если же нужно выполнить набор из нескольких инструкций как одну команду (например, при создании процедур, фунуций, триггеров), то в зависимости от используемого клиента может потребоваться переопределить разделитель с помощью DELIMITER, иначе интерпретация команды остановится на первой ; и будет ошибка синтаксиса. Пример:

    delimiter //
    create procedure test()
    begin
    set @a=1;
    select @a;
    end//

    Обратите внимание: DELIMITER это команда консольного клиента mysql, необходимость его использования зависит от того как вы передаете команду серверу. Например,:
    • mysql_query() выполняет содержимое как одну команду, добавление delimiter приведет к error 1064 с цитатой, начинающейся со слова delimiter
    • phpmyadmin удаляет слово delimiter из-за чего возникает error 1064 с цитатой, начинающейся с переопределенного разделителя
    • в MysqlQueryBrowser напротив необходимо использовать delimiter.

2. Перенос базы на другой сервер.

У вас есть дамп (т.е. файл с расширением .sql) и при попытке его импортировать вы получаете ошибку 1064. Причины:

  • В различных версиях набор ключевых слов и синтаксис может немного отличаться. Наиболее распространенный случай: команда create table, в которой ключевое слово type было заменено на engine. Например, если вы получаете ошибку:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘TYPE=MyISAM CHARACTER SET `utf8`’ at line 29

    Это означает, что вы переносите базу в пятую версию сервера MySQL, в котором ключевое слово TYPE не поддерживается и его нужно заменить на ENGINE.

    Редко бываю случаи, когда перенос идет на старый (~3.23) сервер, который кодировки не поддерживает. Тогда ошибка будет иметь вид:

    #1064 — You have an error in your SQL syntax near ‘DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci’ at line 1

    Такое может произойти, если вы переносите базу с хостинга на локальный комп, где стоит древняя версия MySQL. Лучшим решением в данном случае будет не править дамп, а обновить MySQL.

  • Часто проблемы вызваны тем, что дамп делается неродными средствами MySQL (например, phpmyadmin) из-за чего в нем могут быть BOM-маркер, собственный синтаксис комментариев, завершения команды и т.д. Кроме того при использовании того же phpmyadmin возможна ситуация при которой из-за ограничения апача на размер передаваемого файла команда будет обрезана, что приведет к ошибке 1064. Например, если вы получаете ошибку:

    #1064 — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘
    CREATE TABLE `jos_banner` (
      `bid` int(11) NOT NULL auto_increment,
      `ci’ at line 1

    Значит ваш дамп содержит BOM-маркер. Это три байта в начале файла, помогающие программе определить что данный файл сохранен в кодировке UTF-8. Проблема в том, что MySQL пытается интерпретировать их как команду из-за чего возникает ошибка синтаксиса. Нужно открыть дамп в текстовом редакторе (например, Notepad++) и сохранить без BOM.

    Для избежания подобных проблем при создании дампа и его импорте лучше пользоваться родными средствами MySQL, см http://sqlinfo.ru/forum/viewtopic.php?id=583

3. Некорректная работа сайта.

Если во время работы сайта появляются ошибки синтаксиса, то, как правило, причина в установке вами сомнительных модулей к вашей cms. Лучшее решение — отказаться от их использования. Еще лучше предварительно проверять их работу на резервной копии.

Пример. Движок dle 7.2, поставили модуль ,вроде бы все Ок, но:

MySQL Error!
————————
The Error returned was:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘AND approve=’1’ AND date < ‘2008-10-04 04:34:25′ LIMIT 5’ at line 1

Error Number:
1064
SELECT id, title, date, category, alt_name, flag FROM dle_post WHERE MATCH (title, short_story, full_story, xfields, title) AGAINST (‘Приобретение и оплата скрипта ‘) AND id !=  AND approve=’1’ AND date < ‘2008-10-04 04:34:25’ LIMIT 5

В данном примере мы видим, что причина ошибки в отсутствии значения после «id != «

Обратите внимание: из процитированного сервером MySQL куска запроса причина ошибки не ясна. Если ваша CMS не показывает весь запрос целиком, то нужно в скриптах найти место где выполняется данный запрос и вывести его на экран командой echo.

Кусок кода, который отвечает за данный запрос это

       $db->query («SELECT id, title, date, category, alt_name, flag FROM » . PREFIX . «_post WHERE MATCH (title, short_story, full_story, xfields, title) AGAINST (‘$body’) AND id != «.$row[‘id’].» AND approve=’1′».$where_date.» LIMIT «.$config[‘related_number’]);

Далее можно искать откуда взялась переменная $row и почему в ней нет элемента ‘id’ и вносить исправления, но лучше отказаться от использования такого модуля (неизвестно сколько сюрпризов он еще принесет).

P.S. Если после прочтения статьи ваш вопрос с MySQL Error 1064 остался нерешенным, то задавайте его на форуме SQLinfo

Дата публикации: 25.11.2013

© Все права на данную статью принадлежат порталу SQLInfo.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в бумажных изданиях допускается только с разрешения редакции.

SQL Server Ошибки | SQL Server KIT

0 mdy 7 0 us_english English January,February,March,April,May,June,July,August,September,October,November,December Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday 1033 1033
1 dmy 1 0 Deutsch German Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag 1031 1031
2 dmy 1 0 Français French janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche 1036 1036
3 ymd 7 0 日本語 Japanese 01,02,03,04,05,06,07,08,09,10,11,12 01,02,03,04,05,06,07,08,09,10,11,12 月曜日,火曜日,水曜日,木曜日,金曜日,土曜日,日曜日 1041 1041
4 dmy 1 0 Dansk Danish januar,februar,marts,april,maj,juni,juli,august,september,oktober,november,december jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec mandag,tirsdag,onsdag,torsdag,fredag,lørdag,søndag 1030 1030
5 dmy 1 0 Español Spanish Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo 3082 3082
6 dmy 1 0 Italiano Italian gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic lunedì,martedì,mercoledì,giovedì,venerdì,sabato,domenica 1040 1040
7 dmy 1 0 Nederlands Dutch januari,februari,maart,april,mei,juni,juli,augustus,september,oktober,november,december jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag,zondag 1043 1043
8 dmy 1 0 Norsk Norwegian januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des mandag,tirsdag,onsdag,torsdag,fredag,lørdag,søndag 2068 2068
9 dmy 7 0 Português Portuguese janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado,domingo 2070 2070
10 dmy 1 0 Suomi Finnish tammikuuta,helmikuuta,maaliskuuta,huhtikuuta,toukokuuta,kesäkuuta,heinäkuuta,elokuuta,syyskuuta,lokakuuta,marraskuuta,joulukuuta tammi,helmi,maalis,huhti,touko,kesä,heinä,elo,syys,loka,marras,joulu maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai,sunnuntai 1035 1035
11 ymd 1 0 Svenska Swedish januari,februari,mars,april,maj,juni,juli,augusti,september,oktober,november,december jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec måndag,tisdag,onsdag,torsdag,fredag,lördag,söndag 1053 1053
12 dmy 1 0 čeština Czech leden,únor,březen,duben,květen,červen,červenec,srpen,září,říjen,listopad,prosinec I,II,III,IV,V,VI,VII,VIII,IX,X,XI,XII pondělí,úterý,středa,čtvrtek,pátek,sobota,neděle 1029 1029
13 ymd 1 0 magyar Hungarian január,február,március,április,május,június,július,augusztus,szeptember,október,november,december jan,febr,márc,ápr,máj,jún,júl,aug,szept,okt,nov,dec hétfő,kedd,szerda,csütörtök,péntek,szombat,vasárnap 1038 1038
14 dmy 1 0 polski Polish styczeń,luty,marzec,kwiecień,maj,czerwiec,lipiec,sierpień,wrzesień,październik,listopad,grudzień I,II,III,IV,V,VI,VII,VIII,IX,X,XI,XII poniedziałek,wtorek,środa,czwartek,piątek,sobota,niedziela 1045 1045
15 dmy 1 0 română Romanian ianuarie,februarie,martie,aprilie,mai,iunie,iulie,august,septembrie,octombrie,noiembrie,decembrie Ian,Feb,Mar,Apr,Mai,Iun,Iul,Aug,Sep,Oct,Nov,Dec luni,marţi,miercuri,joi,vineri,sîmbătă,duminică 1048 1048
16 ymd 1 0 hrvatski Croatian siječanj,veljača,ožujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac sij,vel,ožu,tra,svi,lip,srp,kol,ruj,lis,stu,pro ponedjeljak,utorak,srijeda,četvrtak,petak,subota,nedjelja 1050 1050
17 dmy 1 0 slovenčina Slovak január,február,marec,apríl,máj,jún,júl,august,september,október,november,december I,II,III,IV,V,VI,VII,VIII,IX,X,XI,XII pondelok,utorok,streda,štvrtok,piatok,sobota,nedeľa 1051 1051
18 dmy 1 0 slovenski Slovenian januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december jan,feb,mar,apr,maj,jun,jul,avg,sept,okt,nov,dec ponedeljek,torek,sreda,četrtek,petek,sobota,nedelja 1060 1060
19 dmy 1 0 ελληνικά Greek Ιανουαρίου,Φεβρουαρίου,Μαρτίου,Απριλίου,Μα_ου,Ιουνίου,Ιουλίου,Αυγούστου,Σεπτεμβρίου,Οκτωβρίου,Νοεμβρίου,Δεκεμβρίου Ιαν,Φεβ,Μαρ,Απρ,Μαϊ,Ιουν,Ιουλ,Αυγ,Σεπ,Οκτ,Νοε,Δεκ Δευτέρα,Τρίτη,Τετάρτη,Πέμπτη,Παρασκευή,Σάββατο,Κυριακή 1032 1032
20 dmy 1 0 български Bulgarian януари,февруари,март,април,май,юни,юли,август,септември,октомври,ноември,декември януари,февруари,март,април,май,юни,юли,август,септември,октомври,ноември,декември понеделник,вторник,сряда,четвъртък,петък,събота,неделя 1026 1026
21 dmy 1 0 русский Russian Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь янв,фев,мар,апр,май,июн,июл,авг,сен,окт,ноя,дек понедельник,вторник,среда,четверг,пятница,суббота,воскресенье 1049 1049
22 dmy 1 0 Türkçe Turkish Ocak,Şubat,Mart,Nisan,Mayıs,Haziran,Temmuz,Ağustos,Eylül,Ekim,Kasım,Aralık Oca,Şub,Mar,Nis,May,Haz,Tem,Ağu,Eyl,Eki,Kas,Ara Pazartesi,Salı,Çarşamba,Perşembe,Cuma,Cumartesi,Pazar 1055 1055
23 dmy 1 0 British British English January,February,March,April,May,June,July,August,September,October,November,December Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday 2057 1033
24 dmy 1 0 eesti Estonian jaanuar,veebruar,märts,aprill,mai,juuni,juuli,august,september,oktoober,november,detsember jaan,veebr,märts,apr,mai,juuni,juuli,aug,sept,okt,nov,dets esmaspäev,teisipäev,kolmapäev,neljapäev,reede,laupäev,pühapäev 1061 1061
25 ymd 1 0 latviešu Latvian janvāris,februāris,marts,aprīlis,maijs,jūnijs,jūlijs,augusts,septembris,oktobris,novembris,decembris jan,feb,mar,apr,mai,jūn,jūl,aug,sep,okt,nov,dec pirmdiena,otrdiena,trešdiena,ceturtdiena,piektdiena,sestdiena,svētdiena 1062 1062
26 ymd 1 0 lietuvių Lithuanian sausis,vasaris,kovas,balandis,gegužė,birželis,liepa,rugpjūtis,rugsėjis,spalis,lapkritis,gruodis sau,vas,kov,bal,geg,bir,lie,rgp,rgs,spl,lap,grd pirmadienis,antradienis,trečiadienis,ketvirtadienis,penktadienis,šeštadienis,sekmadienis 1063 1063
27 dmy 7 0 Português (Brasil) Brazilian Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez Segunda-Feira,Terça-Feira,Quarta-Feira,Quinta-Feira,Sexta-Feira,Sábado,Domingo 1046 1046
28 ymd 7 0 繁體中文 Traditional Chinese 一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月 01,02,03,04,05,06,07,08,09,10,11,12 星期一,星期二,星期三,星期四,星期五,星期六,星期日 1028 1028
29 ymd 7 0 한국어 Korean 01,02,03,04,05,06,07,08,09,10,11,12 01,02,03,04,05,06,07,08,09,10,11,12 월요일,화요일,수요일,목요일,금요일,토요일,일요일 1042 1042
30 ymd 7 0 简体中文 Simplified Chinese 01,02,03,04,05,06,07,08,09,10,11,12 01,02,03,04,05,06,07,08,09,10,11,12 星期一,星期二,星期三,星期四,星期五,星期六,星期日 2052 2052
31 dmy 1 0 Arabic Arabic Muharram,Safar,Rabie I,Rabie II,Jumada I,Jumada II,Rajab,Shaaban,Ramadan,Shawwal,Thou Alqadah,Thou Alhajja Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday 1025 1025
32 dmy 7 0 ไทย Thai มกราคม,กุมภาพันธ์,มีนาคม,เมษายน,พฤษภาคม,มิถุนายน,กรกฎาคม,สิงหาคม,กันยายน,ตุลาคม,พฤศจิกายน,ธันวาคม ม.ค.,ก.พ.,มี.ค.,เม.ย.,พ.ค.,มิ.ย.,ก.ค.,ส.ค.,ก.ย.,ต.ค.,พ.ย.,ธ.ค. จันทร์,อังคาร,พุธ,พฤหัสบดี,ศุกร์,เสาร์,อาทิตย์ 1054 1054
33 dmy 1 0 norsk (bokmål) Bokmål januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des mandag,tirsdag,onsdag,torsdag,fredag,lørdag,søndag 1044 1044

База знаний «Try 2 Fix»

Ошибка соединения с сервером 1С:Предприятие 8.3: server_addr=tcp://localhost:1540 descr= Сервер недоступен (Не отвечает, завершается аварийно или порт занят другим приложением)

24 февраля 2019 ВК Tw Fb

После установки сервера 1С:Предприятие с платформой 8.3.13.1690 на Windows 10, а потом и на Windows Server 2016, мы получили неожиданную для нас ошибку. При создании «Центрального сервера 1С:Предприятие 8.3» начало появляться сообщение: «Ошибка соединения с сервером 1С:Предприятие 8.3: server_addr=tcp://localhost:1540 descr= Сервер недоступен (Не отвечает, завершается аварийно или порт занят другим приложением) line 1089 file=srcDataExchangeTcpClientImpl.cpp». Рассказываем, почему это происходит и как то победить!

Установка даты и времени на онлайн-кассах ШТРИХ-М

7 ноября 2018 ВК Tw Fb

Если Вы обратили внимание на то, что время на чеках фискальных регистраторов и онлайн-касс не совпадает с текущим временем, Вам нужна наша простейшая инструкция по синхронизации времени. Не стоит вызывать мастера, весь процесс занимает не больше двух минут. Приступим!

Создание, просмотр и распаковка архивов TAR, ZIP, RAR в Linux (tar.gz, tar.bz2, zip, rar)

1 ноября 2018 ВК Tw Fb

Рассказываем как в терминале ОС Linux проводить обыденные операции по архивированию и разархивированию файлов и директорий с помощью TAR, ZIP и RAR.

Ярлыки вместо файлов на флешке. Recycler

31 октября 2018 ВК Tw Fb

Взрыв из прошлого! Не думали, что в 2018 году понадобится эта инструкция, но мы ошибались! На наших клиентов напал старый добрый зловред, который скрывает все файлы и папки на флешке, превращая их в ярлыки! Не торопитесь форматировать или выкидывать флешку, все Ваши файлы на месте!

Настройка редиректа 301 в файле .htaccess. Переадресация со старого домена на новый.

ВК Tw Fb

Если по каким-либо причинам Ваш сайт необходимо перенести на новый домен, но при этом Вы не хотите терять тех, кто знает только старый адрес, Вам пригодится наша крошечная инструкция.

Ubuntu: смена часового пояса и синхронизация времени

ВК Tw Fb

Любой сервер нуждается в выставлении точного времени. Это нужно для самых различных вещей, начиная от сбора корректных логов, заканчивая работой WEB-приложений, в работе которых участвуют сертификаты. Установка точного времени складывается из двух частей: синхронизация самого времени и установка правильного часового пояса. Посмотрим, как нам это сделать.

LAMP-Stack сервер: ещё одна инструкция по настройке Linux + Apache + MySQL + PHP + phpMyAdmin на Ubuntu 18. Установка с помощью Tasksel.

22 октября 2018 ВК Tw Fb

Ещё одна — потому что в Интернете существует уже 100500 таких инструкций. А чем мы хуже? Настраиваем легендарную связку Linux + Apache + MySQL + PHP + phpMyAdmin на чистой Ubuntu 18 старым дедовским способом. А потом посмотрим, что нам даёт инструмент Tasksel. Если Вы любите хардкор, то у нас есть инструкция по созданию WEB-сервера на основе FreeBSD. Эта настройка подойдёт скорее для выполнения университетских лабораторных работ, нежели для продакшна. Но это тот минимум, который позволит использовать все перечисленные в заголовке компоненты.

Штрих-М: Исчерпан ресурс хранения

27 сентября 2018 ВК Tw Fb

В один прекрасный день это случилось с нашими клиентами: при попытке пробить чек в 1С:Рознице появилось это волшебное сообщение. Что же случилось?

Kaspersky Internet Security: Невозможно гарантировать подлинность домена, с которым устанавливается соединение

ВК Tw Fb

Пользователи Kaspersky Internet Security часто могут это видеть сообщение в нижнем правом углу экране. В некоторых случаях стоит задуматься, стоит ли продолжать соединение (если Вы пытаетесь зайти на неизвестный веб-сайт), но в некоторых его следует игнорировать: если у Вас личный домен почты (@*.ru) и нарушена цепочка сертификатов. Во втором случае, это сообщение через некоторое время после начала работы начинает раздражать, учитывая, что каждый раз вам приходится нажимать кнопку «Продолжить». Рассказываем, как избавится от назойливого уведомления. 

SQL код ошибки с объяснением и разрешением

-818 802
SQL код ошибки SQL код ошибки Описание Объяснение Предложение
-117 НАЗНАЧАЕМЫЕ ЗНАЧЕНИЯ НЕ СООТВЕТСТВУЮТ КОЛИЧЕСТВУ УКАЗАННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ СТОЛБЦОВ. Количество вставляемых значений в список значений оператора INSERT не совпадает с указанным количеством объектов/столбцов.Кроме того, количество значений в правой части присваивания в операторе присваивания SET или предложении SET в операторе UPDATE не соответствует количеству столбцов в левой части. Исправьте оператор, указав одно и только одно значение для каждого из указанных объектов/столбцов.
-150 ОБЪЕКТ ИНСТРУКЦИИ INSERT, DELETE ИЛИ UPDATE ЯВЛЯЕТСЯ ПРЕДСТАВЛЕНИЕМ, ПОДДЕРЖИВАЕМОЙ СИСТЕМОЙ МАТЕРИАЛИЗОВАННОЙ ТАБЛИЦЕЙ ЗАПРОСОВ ИЛИ ТАБЛИЦЕЙ ПЕРЕХОДОВ, ДЛЯ КОТОРОЙ НЕ ВЫПОЛНЯЕТСЯ ЗАПРОШЕННАЯ ОПЕРАЦИЯ. Произошло одно из следующих событий: Таблица переходов была названа в операторах INSERT, UPDATE, DELETE, MERGE или TRUNCATE в инициированном действии. Таблицы переходов доступны только для чтения. Представление, указанное в операторе INSERT, UPDATE, DELETE, MERGE или TRUNCATE, определено таким образом, что запрошенная операция вставки, обновления, удаления или усечения не может быть выполнена над ним. Вставки в представление запрещены, если: Определение представления содержит предложение соединения, GROUP BY или HAVING. Предложение SELECT в определении представления содержит квалификатор DISTINCT, арифметическое выражение, строковое выражение, встроенную функцию, или константа.Два или более столбца представления являются производными от одного и того же столбца. Базовая таблица представления содержит столбец, который не имеет значения по умолчанию и не включен в представление. Обновления представления запрещены, если: Определение представления содержит объединение, предложение GROUP BY или предложение HAVING. Предложение SELECT в определении представления содержит квалификатор DISTINCT или встроенную функцию. Кроме того, данный столбец в представлении не может быть обновлен (т. е. значения в этом столбце не может быть обновлен), если столбец является производным от арифметического выражения, константы, столбца, который является частью ключа секционированного индекса, или столбца таблицы каталога, который не может быть обновлен.Удаление для представления запрещено, если: Определение представления содержит предложение соединения, GROUP BY или HAVING. Предложение SELECT в определении представления содержит квалификатор DISTINCT или встроенную функцию. Усечения для представления всегда запрещены. Вспомогательная таблица или таблица XML была названа в операторе TRUNCATE. Обязательно укажите базовые имена таблиц/представлений DB2 для операторов INSERT. Если ошибка произошла в операторе CREATE TRIGGER, удалите ссылку INSERT, UPDATE, MERGE или DELETE на таблицу переходов.
-180 НЕДЕЙСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ ДАТЫ, ВРЕМЕНИ ИЛИ МЕТКИ ВРЕМЕНИ. Длина или строковое представление значения DATE, TIME или TIMESTAMP не соответствует допустимому формату. Значение может содержать одно из следующих значений: Для переменной хоста — номер позиции входной переменной хоста. Если номер позиции не может быть определен, отображается пробел. Для константы строки символов — константа строки символов. Максимальная отображаемая длина — это длина SQLERRM.Для символьного столбца имя столбца. Если столбец является столбцом VIEW и у него есть соответствующий базовый столбец, отображается имя столбца VIEW. Если столбец является столбцом VIEW, но не имеет соответствующего базового столбца, отображается строка «*N». В противном случае значение представляет собой строку «*N». Убедитесь, что значение данных находится в правильном диапазоне и правильном типе значения. Исправьте программу, чтобы убедиться, что указанное значение соответствует синтаксису DATE, TIME и TIMESTAMP.
-181 СТРОКОВОЕ ПРЕДСТАВЛЕНИЕ ЗНАЧЕНИЯ DATETIME НЕ ЯВЛЯЕТСЯ ДЕЙСТВИТЕЛЬНЫМ ЗНАЧЕНИЕМ DATETIME. Строковое представление даты и времени находится за пределами допустимого диапазона или имеет неправильный формат. Проверьте формат данных с помощью Справочного руководства по SQL. Проверьте, находится ли значение в допустимом диапазоне и в правильном ли формате. Исправьте синтаксис и повторите оператор.
-204 Имя/Объект ЯВЛЯЕТСЯ НЕОПРЕДЕЛЕННЫМ ИМЕНЕМ. Объект, идентифицированный именем , не определен в подсистеме Db2.Этот SQLCODE можно сгенерировать для любого типа объекта Db2. Убедитесь, что имя объекта было правильно указано в операторе SQL, включая все необходимые квалификаторы. Если это правильно, убедитесь, что объект существует в системе, прежде чем повторно отправлять выписку.
-227 FETCH выборка-ориентация НЕ РАЗРЕШЕНА, ПОТОМУ ЧТО КУРСОР имя-курсора ИМЕЕТ НЕИЗВЕСТНУЮ ПОЗИЦИЮ (sqlcode,sqlstate). Позиция курсора для имя-курсора неизвестна.Предыдущая операция FETCH с несколькими строками для курсора имя-курсора привела к ошибке (SQLCODE sqlcode , SQLSTATE sqlstate ) в процессе обработки нескольких строк, полученных из Db2. Одна или несколько запрошенных строк не могут быть возвращены в программу после ошибки, в результате чего положение курсора остается неизвестным. строк, извлеченных из Db2, могли быть возвращены прикладной программе. ЗАКРЫТЬ и снова ОТКРЫТЬ курсор; Для использования с возможностью прокрутки (ПЕРВЫЙ, ПОСЛЕДНИЙ, ДО, ПОСЛЕ или АБСОЛЮТНЫЙ) для установления действительного положения.
-305 HE НУЛЕВОЕ ЗНАЧЕНИЕ НЕ МОЖЕТ БЫТЬ НАЗНАЧЕНО НОМЕРУ ВЫХОДНОЙ ПЕРЕМЕННОЙ ХОЗЯИНА, ПОТОМУ ЧТО НЕ ЗАДАНА ПЕРЕМЕННАЯ ИНДИКАТОРА. Оператор присваивания FETCH, SELECT, VALUES INTO или SET привел к извлечению нулевого значения для вставки в выходную переменную хоста, обозначенную номером записи ‘номер позиции’ выходной SQLDA, для которой нет индикаторной переменной был предоставлен.Переменная-индикатор должна быть указана, если столбец возвращает нулевое значение. Добавить переменную-индикатор NULL в инструкцию SELECT в формате «столбец: переменная-хозяина» Проверить определение таблицы, которая является объектом инструкции, и исправить прикладную программу, чтобы она предоставляла переменные-индикаторы для всех переменных хоста, в которые могут быть включены значения NULL. получено. Сюда входят переменные хоста для столбцов, которые могут содержать нулевые значения, и переменные хоста, которые получают результаты агрегатных функций, таблица результатов которых может быть пустой.
-501 КУРСОР, ОПРЕДЕЛЕННЫЙ В ЗАЯВЛЕНИИ FETCH ИЛИ CLOSE, НЕ ОТКРЫТ. Прикладная программа пыталась выполнить выборку с помощью курсора или закрыть курсор в то время, когда указанный курсор не был открыт. Исправьте логику в прикладной программе, чтобы ОТКРЫТЬ курсор перед оператором FETCH или CLOSE. Проверьте предыдущий код ошибки SQL, который мог закрыть курсор. Операции фиксации и отката закрывают курсоры. Коды ошибок SQL -404, -652, -679, -802, -901, -904, -909, -910, -911, -913 и -952 могут привести к закрытию курсора.Код ошибки SQLCODE во время обработки предиката закрывает курсор. После закрытия курсора любые операторы выборки или закрытия курсора получат SQLCODE -501. открыт во время обработки инструкции FETCH или CLOSE.
-502 КУРСОР, ИДЕНТИФИКАЦИОННЫЙ В ОТКРЫТОМ ЗАЯВЛЕНИИ, УЖЕ ОТКРЫТ. Прикладная программа попыталась выполнить оператор OPEN для уже открытого курсора. Правильная логика в прикладной программе для CLOSE CURSOR перед оператором OPEN.
-503 СТОЛБЦ НЕ МОЖЕТ БЫТЬ ОБНОВЛЕН, ПОТОМУ ЧТО ОН НЕ ОПРЕДЕЛЕН В ПРЕДЛОЖЕНИИ ОБНОВЛЕНИЯ УКАЗАНИЯ SELECT КУРСОРА. Прикладная программа попыталась обновить (используя курсор) значение в столбце таблицы объектов, которое не было указано в предложении FOR UPDATE в объявлении курсора. Исправить прикладную программу.Если столбец должен быть обновлен, его имя должно быть добавлено в предложение FOR UPDATE объявления курсора.
-530 ВСТАВИТЬ ИЛИ ОБНОВИТЬ ЗНАЧЕНИЕ ВНЕШНЕГО КЛЮЧА имя ограничения НЕДЕЙСТВИТЕЛЬНО. Попытка операции вставки или обновления поместить значение во внешний ключ таблицы объектов; однако это значение не было равно некоторому значению родительского ключа родительской таблицы. Когда строка вставляется в зависимую таблицу, значение вставки внешнего ключа должно быть равно значению родительского ключа некоторой строки таблицы. родительская таблица в связанной связи.Когда значение внешнего ключа обновляется, значение обновления внешнего ключа должно быть равно значению родительского ключа некоторой строки родительской таблицы связанной связи. Сначала проверьте значение вставки или обновления внешнего ключа, а затем сравните его с каждым значением родительского ключа родительской таблицы, чтобы определить причину проблемы. Убедитесь, что строка INSERT для таблицы DB2 PARENT завершена перед строкой INSERT в таблице CHILD.
-532 ОТНОШЕНИЕ имя-ограничения ОГРАНИЧИВАЕТ УДАЛЕНИЕ СТРОКИ С RID X’rid-номер’. Операция DELETE попыталась удалить указанную родительскую строку в таблице объектов и все связанные дочерние строки в дочерних таблицах. Однако правило удаления RESTRICT или NO ACTION было задано для одной или нескольких дочерних таблиц. Строка таблицы не может быть удалена, поскольку она имеет зависимую связь с правилом удаления RESTRICT или NO ACTION, или удаление каскадно приводит к строка, которая является зависимой в отношении с правилом удаления RESTRICT или NO ACTION. Если неудавшаяся инструкция является ALTER TABLE с ALTER PART ROTATE FIRST TO LAST, то существует ссылочное ограничение, определенное с помощью DELETE RESTRICT в таблице. , а данные в секции, предназначенные для повторного использования, не могут быть удалены из-за ссылочного ограничения. Проверьте правило удаления для всех дочерних таблиц, чтобы определить причину проблемы. Конкретные задействованные таблицы можно определить из отношения имя-ограничения . Конкретная строка-потомок известна под номером RID X рид-номер . Измените программу на УДАЛЕНИЕ строки дочерней таблицы перед УДАЛЕНИЕМ строки в РОДИТЕЛЬСКОЙ таблице.
-551 auth-id НЕ ИМЕЕТ ПРИВИЛЕГИИ ВЫПОЛНЯТЬ ОПЕРАЦИЮ ОПЕРАЦИЯ НА ОБЪЕКТЕ имя-объекта. ID авторизации auth-id  попытка выполнить операцию  на объекте имя-объекта  без предоставления надлежащих полномочий для этого. Эта ошибка также может возникнуть, если объект является представлением, доступным только для чтения (для вставки, удаления или обновления операции изменения данных), или если auth-id пытается создать таблицу или представление с идентификатором авторизации, отличным от собственного. . Вы можете создать таблицу с идентификатором auth-id , отличным от вашего собственного, только если ваш идентификатор авторизации — SYSADM, DBADM или DBCTRL.Вы можете создать представление с идентификатором auth-id , отличным от вашего собственного, только если ваш идентификатор авторизации — SYSADM. Если вы используете доверенный контекст, токен auth-id может возвращать роль вместо идентификатора авторизации. Роль возвращается, если роль действовала и проверка авторизации выполняется по роли, а не по идентификатору авторизации сеанса, когда возникло условие. В противном случае возвращается идентификатор авторизации. Роль возвращается в следующем формате в виде одного маркера: ROLE: имя-роли Если вы используете модуль управления доступом RACF® для проверки авторизации, auth-id  может отличаться от значения, указанного в сообщении ICh508I. .Идентификатор, указанный в сообщении ICh508I, является идентификатором пользователя, который RACF использовал для проверки привилегии. В дополнение к ситуациям, упомянутым ранее, эта ошибка может возникать в следующих ситуациях: Когда операция  является GRANT ***, ключевое слово ALL был использован в операторе GRANT, но лицо, предоставившее право auth-id , не имеет никаких прав на предоставление. Когда операция  является GRANT (привилегии таблицы или представления), а указанная привилегия не может быть предоставлена ​​для представления или вспомогательной таблицы.Если операция  – это DROP PACKAGE, имя объекта  состоит из идентификатора коллекции, имени пакета и маркера согласованности. Маркер согласованности однозначно идентифицирует версию пакета, на удаление которой у пользователя нет полномочий. Если операция является USAGE OF DISTINCT TYPE или USAGE OF JAR, имя объекта идентифицирует, соответственно, DISTINCT TYPE или JAR, для которых auth-id не имеет привилегии USAGE. Если операция  является ALTER JAR, auth-id не имеет права ALTERIN на схему JAR имя объекта .Если эта ошибка возникает, когда Db2 создает или изменяет таблицу, включающую ссылочные ограничения, это сообщение об ошибке сообщает, что у пользователя нет необходимой привилегии ALTER для выполнения операции FOREIGN KEY, DROP FOREIGN KEY, DROP PRIMARY KEY или DROP UNIQUE. Имя объекта идентифицирует таблицу объектов оператора CREATE или ALTER TABLE, а не таблицу, для которой у пользователя нет привилегии ALTER. Если эта ошибка возникает для распределенного SQL-запроса, может возникнуть одно из следующих условий: Если преобразование идентификатора авторизации действует либо для запрашивающего сайта Db2, либо для обслуживающего (отвечающего) сайта Db2, то auth-id — это преобразованная авторизация. Я БЫ.Обратитесь к части 3 (том 1) Руководства по администрированию Db2 за информацией о преобразовании ID авторизации. Если в операторе SQL использовался псевдоним, имя-объекта — это разрешенное имя удаленной таблицы или имя представления. Если эта ошибка возникает во время вызова подпрограммы, идентификатор авторизации auth-id не имеет привилегии EXECUTE ни для одной подпрограммы-кандидата в пути SQL. Переменная для object-name  – это имя подпрограммы-кандидата в пути SQL.Объект не существует, а специальный регистр CURRENT RULES имеет значение STD. Эта ошибка может возникать для пакетов, связанных с опцией DYNAMICRULES(BIND), когда разрешено кэширование авторизации, кэширование операторов или и то, и другое, и если существуют следующие условия: Активна процедура выхода авторизации управления доступом. Системный параметр AUTHEXIT_CHECK имеет значение PRIMARY. ID авторизации процесса не имеет необходимых привилегий. Если выход авторизации управления доступом активен и для системного параметра AUTHEXIT_CHECK установлено значение Db2, эта ошибка может возникнуть, если невозможно создать ACEE для идентификатора авторизации auth-id .Если операция  является CREATE VARIABLE или DROP VARIABLE, auth-id не имеет необходимых привилегий для выполнения этого действия. Чтобы исправить ошибку, проверьте следующие ситуации: auth-id имеет права на выполнение операции. Объект с именем существует. auth-id  не пытается создать таблицу с квалификатором схемы, отличным от auth-id . Если вы используете выход авторизации управления доступом с RACF, убедитесь, что идентификатор авторизации auth-id определен в RACF и ему предоставлены необходимые права для выполнения операции.Проверьте значение USER в сообщении RACF ICh508I, чтобы определить идентификатор авторизации, который пытался выполнить операцию.
-803 ВСТАВЛЕННОЕ ИЛИ ОБНОВЛЕННОЕ ЗНАЧЕНИЕ НЕДЕЙСТВИТЕЛЬНО, ПОТОМУ ЧТО ИНДЕКС В ПРОСТРАНСТВЕ ИНДЕКСА indexspace-name ОГРАНИЧИВАЕТ СТОЛБЦЫ ТАБЛИЦЫ, ПОЭТОМУ НИКАКИЕ ДВЕ СТРОКИ НЕ МОЖЕТ СОДЕРЖАТЬ ПОВТОРЯЮЩИЕСЯ ЗНАЧЕНИЯ CHO SEOLUE. ИЗБАВИТЬСЯ ОТ СУЩЕСТВУЮЩЕГО РЯДА — Xrid. Таблица, являющаяся объектом операции вставки или обновления, должна иметь уникальные значения в определенных столбцах.Завершение запрошенной операции приведет к дублированию значений. имя-индексного-пространства Имя индекса переполнения хэша или имя индексного пространства, которое содержит уникальный индекс, обеспечивающий первичный ключ. идентификатор записи Идентификатор записи строки, в которой могут существовать повторяющиеся значения. Когда indexspace-name идентифицирует индекс переполнения хэша, возникает ошибка, поскольку таблица с хеш-организацией не может иметь две строки с одинаковыми значениями хеш-ключа. .Если индексное пространство является XML-индексом, дублирующиеся значения могут быть вызваны значениями в XML-документе или результатом преобразования и округления типа данных. В противном случае первичный ключ, уникальное ограничение или уникальный индекс существуют для одного или нескольких столбцы таблицы. Операция не может быть выполнена, так как одно или несколько значений создали бы повторяющийся ключ в уникальном индексе или ограничении. Если представление является объектом оператора вставки или обновления, таблица, определяющая представление, ограничена.Обновление также может быть вызвано операцией удаления родительской строки, которая каскадно передается зависимой строке с правилом удаления SET NULL. Изучите определения для UNIQUE INDEX или ключа HASH, указанного в индексном пространстве, которое идентифицируется indexspace-name  , чтобы определить накладываемое ограничение уникальности. Обратитесь к SYSIBM.SYSINDEXES, чтобы узнать имя пространства индекса и связанное с ним имя индекса. Операция обновления Убедитесь, что указанная операция соответствует ограничению уникальности.Если это не указывает на ошибку, проверьте таблицу объектов, чтобы определить причину проблемы. Операция вставки Просмотрите таблицу объектов, чтобы определить, какие значения нарушают ограничение уникальности. Если инструкция INSERT содержит подзапрос, сопоставьте содержимое таблицы, адресованной подзапросом, и содержимое таблицы объектов, чтобы определить причину проблемы. Операция удаления Проверьте ключевые столбцы индекса в таблице, определяющей индекс. Эти столбцы содержат внешний ключ, который при установке NULL при каскадном удалении из таблицы объектов приводит к дублированию значений. Операция слияния Убедитесь, что указанная операция соответствует ограничению уникальности. Если это не указывает на ошибку, проверьте таблицу объектов, чтобы определить причину проблемы. В очень редких случаях ошибка может быть вызвана другой инструкцией INSERT/UPDATE, которая изменила таблицу объектов во время обработки инструкции MERGE. В таких обстоятельствах проверьте свои приложения и внесите соответствующие изменения для обеспечения параллелизма. Например, изменение уровня изоляции или повторный запуск оператора MERGE может помочь избежать этой проблемы.
-805 ИМЯ DBRM ИЛИ ПАКЕТА  имя-расположения . идентификатор коллекции . имя-базы-данных . токен согласованности НЕ НАЙДЕН В ПЛАНЕ имя-плана . REASON  код причины Прикладная программа попыталась использовать DBRM или пакет, который не был найден. название местоположения . идентификатор коллекции . имя-базы-данных . маркер согласованности Пакет, который не найден. идентификатор коллекции  пустой, если специальный регистр CURRENT PACKAGESET был пустым для выполнения локальной программы. имя-плана Имя плана. код причины Числовое значение, указывающее причину сбоя. 01 Имя DBRM не найдено в списке членов плана, и для плана нет списка пакетов. Определение проблемы: Запрос 1
Корректирующее действие: Добавьте DBRM, идентифицированную dbrm-name , в список MEMBER подкоманды BIND и привяжите план приложения, идентифицированный имя-плана .Имя пакета не найдено, так как для плана нет списка пакетов. Определение проблемы: Запрос 2
Корректирующее действие: Добавьте параметр PKLIST с соответствующей записью списка пакетов в подкоманду REBIND и повторно привяжите план приложения, идентифицированный имя-плана . 02 Имя DBRM  dbrm-name  не соответствует записи в списке участников или списке пакетов. Любое из следующих условий может быть проблемой: Условия BIND идентификатор коллекции в списке пакетов был неправильным, когда был связан план приложения, идентифицированный имя плана .Определение проблемы: Запрос 2
Корректирующее действие: Исправьте идентификатор коллекции записи в параметре PKLIST и используйте подкоманду REBIND для повторной привязки плана приложения, который идентифицируется имя-плана . имя-местоположения в списке пакетов было неправильным, когда был связан план приложения, идентифицированный имя-плана . Определение проблемы: Запрос 2
Корректирующее действие: Исправьте имя местоположения записи в параметре PKLIST и используйте подкоманду REBIND для повторной привязки плана приложения, который идентифицируется имя-плана . имя-местоположения в параметре CURRENTSERVER для подкоманды BIND было неверным, когда был привязан план приложения, идентифицированный имя-плана . Определение проблемы: Запрос 3
Корректирующее действие: Исправьте имя местоположения в параметре CURRENTSERVER и используйте подкоманду REBIND для повторной привязки плана приложения, идентифицированного имя-плана . Условия приложения Специальный регистр CURRENT PACKAGESET не был правильно установлен приложением.При использовании SET CURRENT PACKAGESET = :HV обязательно используйте правильную схему кодирования, которая должна соответствовать :HV в опциях параметров подсистемы. Этот оператор не требует привязки пакета или DBRM к плану, поэтому он использует схему кодирования, определенную для системы. То же условие применяется к SET CURRENT PACKAGE PATH.
Корректирующее действие: Правильно установите специальный регистр CURRENT PACKAGESET. Приложение не было подключено к нужному местоположению. Корректирующее действие: подключитесь к правильному местоположению. 03 Имя DBRM, идентифицированное как dbrm-name , соответствует одной или нескольким записям в списке пакетов, и поиск по этим записям не нашел пакет. Любое из условий, перечисленных для кода причины значение 02, является возможными причинами для кода причины значение 03, как и следующие дополнительные условия: DBRM версии выполняемой прикладной программы не была привязана. (Пакет с тем же токеном согласованности, что и у прикладной программы, не найден.) Определение проблемы: Запрос 4
Корректирующее действие: Привяжите DBRM версии прикладной программы, которая должна выполняться, к коллекции, которая идентифицируется идентификатором коллекции . Выполняется неправильная версия прикладной программы. Корректирующее действие: Запустите правильную версию прикладной программы. Маркер согласованности прикладной программы совпадает с привязанным пакетом. 04 Пакет не существует на удаленном сайте, который идентифицируется значением location-name .Определение проблемы: Запрос 4 пусто Значение кода причины пусто, если длина имя-местоположения  равна 16, длина идентификатора коллекции  равна 18, а длина dbrm-name  равна 8 из-за длины SQLERRMT. В собственной процедуре SQL, если затронутый оператор SQL следует за оператором SET CURRENT PACKAGESET, SET CURRENT PACKAGE PATH или CONNECT, или если он ссылается на объект на удаленном сервере, необходимо добавить дополнительные пакеты. связаны с помощью BIND COPY.Всякий раз, когда собственная процедура SQL изменяется таким образом, что требуется регенерация, дополнительный пакет также должен быть связан с параметром копирования.
Определение проблемы Следующие запросы помогают определить проблему. Запустите эти запросы в локальном расположении. Запрос 1: Отобразить DBRM в списке участников плана SELECT PLCREATOR, PLNAME, NAME, VERSIONFROM SYSIBM.SYSDBRMWHERE PLNAME = ‘ имя-плана ’;
Если строки не возвращаются, план был связан без списка элементов. Запрос 2: Показать записи в списке пакетов для плана SELECT LOCATION, COLLID, NAMEFROM SYSIBM.SYSPACKLISTWHERE PLANNAME = ‘ имя-плана ’;
Если строки не возвращаются, план был связан без списка пакетов. Запрос 3: Показать значение CURRENTSERVER, указанное в подкоманде BIND для плана. ВЫБЕРИТЕ ИМЯ, CURRENTSERVERFROM SYSIBM.SYSPLANWHERE NAME = ‘ имя-плана ’;
Запрос 4: Определите, есть ли соответствующий пакет в SYSPACKAGE Если пакет является удаленным, поместите имя местоположения в предложение FROM.Если значение collection-id  в сообщении пусто, используйте следующую версию запроса: SELECT COLLID, NAME, HEX(CONTOKEN), VERSIONFROM  location-name .SYSIBM.SYSPACKAGEWHERE NAME = ‘ dbrm-name ‘ AND HEX(CONTOKEN) = ‘ маркер согласованности ‘;
Если значение collection-id  в сообщении не является пустым, используйте следующую версию запроса: SELECT COLLID, NAME, HEX(CONTOKEN), VERSIONFROM  location-name .SYSIBM.SYSPACKAGEWHERE NAME = ‘ dbrm-name ‘И HEX (CONTOKEN) = ‘ токен согласованности ‘И COLLID = ‘ идентификатор коллекции ‘;
Если строки не возвращаются, правильная версия пакета не была привязана.
-811 РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ ВСТРОЕННОГО ТЕХНОЛОГИИ SELECT ИЛИ ПОДЗАПРОСА В ПРЕДЛОЖЕНИИ SET УКАЗАНИЯ ОБНОВЛЕНИЯ ЯВЛЯЕТСЯ ТАБЛИЦЕЙ, СОСТОЯЩЕЙ БОЛЕЕ ОДНОЙ СТРОКИ, ИЛИ РЕЗУЛЬТАТОМ ПОДЗАПРОСА БАЗОВОГО БАЗОВОГО ПРЕДВАРИТЕЛЬНОГО ТРЕБОВАНИЯ ONE VALUE Выполнение встроенного оператора SELECT или подзапроса в предложении SET оператора UPDATE привело к созданию таблицы результатов, содержащей более одной строки. В качестве альтернативы подзапрос, содержащийся в базовом предикате, выдал более одного значения. Проверьте синтаксис оператора, чтобы убедиться, что он содержит правильные спецификации условия. Если синтаксис инструкции правильный, может возникнуть проблема с данными, из-за которой возвращается более одной строки или значения, когда вы этого не ожидаете.
-818 Сгенерированный прекомпилер Timestamm x В модуле нагрузки отличается от сетевого времени Bind Timestamp y , созданных из DBRM Z Timestamp, который хранится в модуле нагрузки приложения. не соответствует отметке времени, хранящейся в плане или пакете.Если временные метки не совпадают, приложению не разрешается обрабатывать оператор SQL. x Отметка времени, созданная прекомпилятором. Эта отметка времени является внутренней отметкой времени Db2. Он не имеет внешней интерпретации. y Отметка времени привязки. Эта отметка времени является внутренней отметкой времени Db2. Он не имеет внешней интерпретации. z Имя модуля запросов к базе данных (DBRM). Прекомпилятор SQL помещает метку времени y в DBRM и метку времени x в список параметров прикладной программы для каждого оператора SQL.Во время связывания Db2 сохраняет отметку времени DBRM для использования во время выполнения. Во время выполнения отметка времени x для обрабатываемого оператора SQL сравнивается с отметкой времени y , полученной из DBRM z во время связывания. Если две временные метки не совпадают, DBRM и прикладная программа не являются результатом одной и той же операции предварительной компиляции. Эта проблема может возникнуть в следующих случаях: Приложение было предварительно скомпилировано, скомпилировано и связано, но не связано. Приложение было предварительно скомпилировано и связано, но не было скомпилировано и связано с прикладной программой.Приложение было связано с использованием DBRM, полученной в результате предварительной компиляции прикладной программы, отличной от той, которая создала объектный модуль, связанный с модулем приложения. Снова свяжите приложение, используя DBRM для прикладной программы, соответствующей загрузочному модулю.
-904 НЕУДАЧНОЕ ВЫПОЛНЕНИЕ, ВЫЗВАННОЕ НЕДОСТУПНЫМ РЕСУРСОМ. ПРИЧИНА код причины , ТИП РЕСУРСА тип ресурса И ИМЯ РЕСУРСА имя-ресурса Оператор SQL не может быть выполнен, так как требуемый ресурс недоступен. код причины Значение кода причины Db2, указывающее причину сбоя. Объяснение кодов причин см. в разделе Коды причин Db2. тип ресурса  и  имя ресурса Тип и имя ресурса, который указывается в сообщении. Объяснение значений типа ресурса и имени ресурса см. в разделе Типы ресурсов. для недоступного ресурса.Если код причины  – это 00E7000E, а тип ресурса  – 00001080, SQLCODE -904 был выдан IBM Db2 Analytics Accelerator for z/OS, а имя-ресурса  – это текст сообщения от акселератора, указывающий причину отказ. Соберите список набора данных SYSLOG за период времени, охватывающий сбой. Найдите в наборе данных SYSLOG сообщения, связанные с ошибкой. Проверьте идентификатор ресурса, который был недоступен. Чтобы определить, почему ресурс был недоступен, обратитесь к указанному коду причины .Если имя-ресурса  идентифицирует оптимальный пул буферов, либо определите пул буферов с этим именем, либо создайте таблицу в табличном пространстве, которое определено с этим пулом буферов. Если SQLCODE -904 был выдан IBM Db2 Analytics Accelerator для z/OS, обратитесь в службу поддержки IBM® для IBM Db2 Analytics Accelerator для z/OS и предоставьте им текст сообщения имя-ресурса .
-911 ТЕКУЩАЯ ЕДИНИЦА РАБОТЫ БЫЛА ОТКАТА ИЗ-ЗА БЛОКИРОВКИ ИЛИ ТАЙМ-АУТА.ПРИЧИНА код причины , ТИП РЕСУРСА тип ресурса И ИМЯ РЕСУРСА имя-ресурса Текущая единица работы оказалась жертвой в тупиковой ситуации или истекло время ожидания, и ее пришлось откатить. код причины Значение кода причины Db2, указывающее причину сбоя. Объяснение кодов причин см. в разделе Коды причин Db2. тип ресурса  и  имя ресурса Тип и имя ресурса, который указывается в сообщении.Объяснение значений resource-type и resource-name см. в разделе Типы ресурсов. Соберите список набора данных SYSLOG за период времени, охватывающий сбой. Найдите в наборе данных SYSLOG сообщения, связанные с ошибкой. Долго работающее приложение или приложение, которое может столкнуться с взаимоблокировкой, должны (если возможно) часто выдавать команды COMMIT. Это может уменьшить вероятность возникновения взаимоблокировки. См. сообщение DSNT376I, чтобы узнать о других возможных способах избежать взаимоблокировок или тайм-аутов в будущем.При получении SQLCODE -911 приложение должно, как правило, завершаться.
-913 НЕУСПЕШНОЕ ВЫПОЛНЕНИЕ, ВЫЗВАННОЕ БЛОКИРОВКОЙ ИЛИ ТАЙМ-АУТОМ. КОД ПРИЧИНЫ код причины , ТИП РЕСУРСА тип ресурса И ИМЯ РЕСУРСА имя-ресурса Приложение оказалось в тупиковой ситуации или истекло время ожидания. Код причины указывает, произошла ли взаимоблокировка или тайм-аут. код причины Значение кода причины Db2, указывающее причину сбоя.Объяснение кодов причин см. в разделе Коды причин Db2. тип ресурса  и  имя ресурса Тип и имя ресурса, который указывается в сообщении. Объяснение значений resource-type и resource-name см. в разделе Типы ресурсов. Соберите список набора данных SYSLOG за период времени, охватывающий сбой. Найдите в наборе данных SYSLOG сообщения, связанные с ошибкой. Приложение должно либо зафиксировать, либо вернуться к предыдущему COMMIT.Затем, как правило, приложение должно завершиться. См. сообщение DSNT376I о возможных способах предотвращения взаимоблокировок или тайм-аутов в будущем.
-922 ОШИБКА АВТОРИЗАЦИИ: тип ошибки ОШИБКА. ПРИЧИНА  код причины Авторизация не удалась из-за ошибки, указанной тип ошибки тип ошибки Типы ошибок авторизации: Авторизация пользователя План доступа Запрошен дублирующий выход Ошибка установки Connect код причины Код причины Db2, связанный с ошибкой авторизации Если тип ошибки  – ‘АВТОРИЗАЦИЯ ПОЛЬЗОВАТЕЛЯ’, ID-авторизации, указанный для Db2 с помощью средства подключения, недействителен для Db2.Обратитесь к системному программисту или системному администратору CICS®, IMS или TSO. Если тип ошибки  – «ДОСТУП К ПЛАНУ», то идентификатор авторизации, связанный с этим подключением, не имеет права использовать указанное имя плана или имя указанного плана. не существует. Обратитесь к системному администратору. Если тип ошибки  – это «ДУБЛИКАЦИЯ ВЫХОДА», значит, вы запросили повторный выход. Если тип ошибки  – «ОШИБКА УСТАНОВКИ», выход для подключения или входа в систему отклонил ваш запрос. Обратитесь к системному программисту.Если тип ошибки  – «CONNECT», запрос SQL CONNECT не смог подключиться к локальной базе данных Db2 с указанным USER/USING. Описание ошибки см. в коде причины. Прикладная программа была переведена в состояние подключения и отсутствия подключения. Единственными операторами SQL, которые могут быть успешно выполнены в этом состоянии, являются операторы CONNECT, COMMIT, ROLLBACK и локальные операторы SET. Любая попытка выполнить другие операторы SQL приведет к ошибке (SQLCODE -900). Любые попытки выполнить операторы SQL после SQLCODE -922, когда типа ошибки не является Connect , приводят к непредсказуемым результатам.
-927 ЯЗЫКОВЫЙ ИНТЕРФЕЙС (LI) БЫЛ ВЫЗВАН, КОГДА ПОДКЛЮЧАЮЩАЯ СРЕДА НЕ БЫЛА УСТАНОВЛЕНА. ПРОГРАММА ДОЛЖНА ВЫПОЛНЯТЬСЯ С ПОМОЩЬЮ КОМАНДЫ DSN В среде TSO пользователь попытался выполнить прикладную программу, не установив сначала правильную среду выполнения, введя команду DSN. В среде IMS, CICS®, RRSAF или средства подключения вызовов (CAF) пользователь попытался выполнить прикладную программу, которая использует неверный языковой интерфейсный модуль. В среде TSO прикладные программы Db2 следует вызывать с помощью подкоманды RUN процессора команд DSN. В среде IMS, CICS, RRSAF или CAF убедитесь, что приложение редактировалось по ссылке или динамически выделяло правильный языковой интерфейсный модуль. В каждой среде требуются следующие модули языкового интерфейса: TSO: DSNELI IMS: DFSLI000 CICS: DSNCLI RRSAF: DSNRLI CAF: DSNALI Параметр DYNAM может привести к загрузке неверного модуля языкового интерфейса во время выполнения.
100 Произошло одно из следующих условий: Ни одна строка не удовлетворяла условиям поиска, указанным в операторе UPDATE или DELETE. Результатом оператора SELECT INTO была пустая таблица. Результат подвыборки оператора INSERT пуст. Оператор FETCH был выполнен, когда курсор был расположен после последней строки таблицы результатов. Нет доступных строк, пригодных для возврата, если был указан параметр SKIP LOCKED DATA с уровнем изоляции CS или RS.Была выполнена инструкция FETCH, возвращающая набор строк, но после текущей позиции курсора не хватило строк, чтобы переместить курсор на полный набор строк. Курсор был расположен на частичном наборе строк. Если цель была указана, данные возвращались только для количества строк, которые были фактически выбраны для частичного набора строк. Число возвращенных строк находится в поле SQLERRD3 SQLCA. Когда инструкция SELECT выполняется с использованием SPUFI, этот SQLCODE указывает на нормальное завершение. Этот SQLCODE также выдается, когда данные LOB не могут быть возвращены.Такая ситуация может возникнуть, когда приложение работает с уровнем изоляции UR, а другое приложение заблокировало табличное пространство LOB.    
117 КОЛИЧЕСТВО ВСТАВЛЯЕМЫХ ЗНАЧЕНИЙ НЕ СООТВЕТСТВУЕТ КОЛИЧЕСТВУ СТОЛБЦОВ ОБЪЕКТА Число значений операции вставки не совпадает с числом значений операции вставки в списке указанных столбцов объекта. Для повышения производительности повторно привяжите план или пакет после исправления инструкции.Чтобы исправить оператор, укажите одно и только одно значение для каждого из указанных столбцов объекта.
231 ТЕКУЩЕЕ ПОЛОЖЕНИЕ КУРСОРА имя-курсора НЕДЕЙСТВИТЕЛЬНО ДЛЯ УКАЗАННОЙ ОРИЕНТАЦИИ ВЫБОРКИ ТЕКУЩЕЙ СТРОКИ ИЛИ НАБОРА РЯД в ориентациях выборки указано, что курсор должен располагаться относительно его текущей позиции: CURRENT или CURRENT ROWSET RELATIVE 0 или ROWSET STARTING AT RELATIVE 0 имя-курсора Имя курсора, используемого для инструкции FETCH. Исправьте прикладную программу, чтобы она установила правильную позицию курсора перед выполнением этого оператора FETCH.
304 1000006 Значение с данными Тип Data-Type1 не может быть назначена переменной хоста, поскольку значение не находится в диапазоне переменной хоста в положении номер с данными типа -type2 FETCH или SELECT в списке или структуре переменных хоста, номер позиции номер позиции  не удалось, поскольку переменная хоста, имеющая тип данных data-type2 , недостаточно велика для хранения извлеченного значения, имеющего тип данных тип данных1 . Убедитесь, что определения таблиц актуальны и что переменная хоста имеет правильный тип данных. См. объяснение для SQLCODE -405 для диапазонов типов данных SQL.
347 HE РЕКУРСИВНОЕ ОБЩЕЕ ТАБЛИЧНОЕ ВЫРАЖЕНИЕ имя МОЖЕТ СОДЕРЖАТЬ БЕСКОНЕЧНЫЙ ЦИКЛ Рекурсивное общее табличное выражение имя 900 может не завершиться. Это предупреждение основано на том, что в итерационной части рекурсивного общего табличного выражения не найден конкретный синтаксис.Ожидаемый синтаксис включает: увеличение столбца INTEGER в итеративном списке выбора на 1. предикат в предложении where итеративной части формы «counter_col < константа» или «counter_col < :hostvar». Отсутствие этого синтаксиса в рекурсивное общее табличное выражение может привести к бесконечному циклу. Данные или некоторые другие характеристики рекурсивного общего табличного выражения могут в любом случае обеспечить успешное завершение оператора. Чтобы предотвратить бесконечный цикл, включите ожидаемый синтаксис, как описано.
802 Exception Exception Исключение типа произошло во время Операция Операция на Данные Данные, позиция Номер Ошибка исключения Исключение — при выполнении одной из следующих операций над полем с типом данных DECIMAL, FLOAT, SMALLINT или INTEGER: СЛОЖЕНИЕ ВЫЧИТАНИЕ УМНОЖЕНИЕ ДЕЛЕНИЕ ОТРИЦАНИЕ ВСТРОЕННАЯ ФУНКЦИЯПроизошла ошибка при обработке арифметического выражения в списке SELECT элемента внешний оператор SELECT, а позиция в списке выбора обозначается номером позиции .Возможные типы исключений: DECIMAL OVERFLOW Исключение десятичного переполнения может возникнуть, когда одна или несколько ненулевых цифр потеряны, потому что поле назначения в любой десятичной операции слишком короткое, чтобы содержать результат. ИСКЛЮЧЕНИЕ ДЕЛЕНИЯ Исключение деления может возникнуть при операции десятичного деления, когда частное превышает указанный размер поля данных. Исключение деления на ноль возникает при любом делении на ноль, за исключением случаев, когда тип данных DECFLOAT. ПЕРЕПОЛНЕНИЕ ЭКСПОНЕНТА Переполнение экспоненты может произойти, когда характеристика результата любой операции с плавающей запятой превышает 127, а дробь результата не равна нулю, т.е.е. величина результата превышает примерно 7,2E+75. ПЕРЕПОЛНЕНИЕ ФИКСИРОВАННОЙ ЗАПЯТОЙ Переполнение фиксированной запятой может произойти во время любой арифметической операции с полями INTEGER или SMALLINT. НЕДЕЙСТВИТЕЛЬНАЯ ОПЕРАЦИЯ
ВНЕ ДИАПАЗОНА При обработке входного, промежуточного или конечного значения может возникнуть ошибка, если значение параметра выходит за пределы допустимого диапазона. ПЕРЕПОЛНЕНИЕ Во время обработки встроенной функции может произойти переполнение. Если тип операции  – ФУНКЦИЯ, то ошибка произошла при обработке входного, промежуточного или конечного значения. SUBNORMAL
НЕДОСТАТОК При выполнении встроенной функции может произойти недозаполнение. Если тип операции  – ФУНКЦИЯ, то ошибка произошла при обработке входного, промежуточного или конечного значения. ZERO DIVIDE
Тип данных, отображаемый в сообщении, может указывать на тип данных временной внутренней копии данных. Это может отличаться от фактического типа данных столбца или литерала из-за преобразований Db2. Внимание:  Части типа исключения , типа данных , типа операции и номера позиции  могут быть возвращены или не возвращены в SQLCA в зависимости от того, когда была обнаружена ошибка.
Изучите выражение, для которого появилось предупреждение, чтобы определить, можно ли определить причину (или вероятную причину) проблемы. Проблема может быть связана с данными, и в этом случае необходимо проверить данные, которые обрабатывались во время возникновения ошибки. См. объяснение SQLCODE -405 для разрешенных диапазонов числовых типов данных.

Как читать и интерпретировать различные коды ошибок SQL

Коды ошибок в SQL генерируются сервером для предоставления информации о том, что пошло не так.Они имеют разное значение в зависимости от используемой версии SQL, но обычно они указывают на невозможность выполнения запрошенной операции.

Самый простой способ изучить его — это простейший язык программирования под названием BASIC и его программы, такие как «Hello world». Введите в интерфейс следующее:

  ПЕЧАТЬ "Привет, мир!"  

Если вы введете PRINT как PRRRR, вы получите сообщение об ошибке (эквивалентным в реальной жизни может быть кто-то, кто говорит вам ехать по правой стороне дороги, т.грамм. соблюдение правил).

Это относительно легко, когда речь идет о простых операциях, но как насчет более сложных систем? Мы также включаем сюда примеры кода SQL. Наслаждаться!

Следующий код импортирует необходимые функции из стандартной библиотеки, затем создает консоль, получает указатель на ее стандартный поток вывода, печатает сообщение в этот поток и освобождает используемые объекты:

  Опция Явный

    Объявить функцию AllocConsole Lib "kernel32" () As Long
    Объявить функцию FreeConsole Lib "kernel32" () As Long
    Объявить функцию CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Объявить функцию GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
    Объявить функцию WriteConsole Lib "kernel32" Псевдоним "WriteConsoleA" _
           (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal _
           nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, _
           lpReserved As Any) As Long
    Объявить функцию Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Long

Частный подчиненный основной ()
    'создать экземпляр консоли
    AllocConsole
    'получить дескриптор вывода консоли
    Dim hOut As Long
    hOut = GetStdHandle(-11&)
    'вывод строки на вывод консоли
    Dim как строка
    s = "Привет, мир!" & vbCrLf
    WriteConsole hOut, ByVal s, Len(s), vbNull, vbNull
    сделать паузу, чтобы посмотреть на вывод
    Сон 2000
    'закрыть дескриптор и уничтожить консоль
    CloseHandle hOut
    FreeConsole
Конец сабвуфера
  

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

Для чего нужны коды ошибок SQL и как они работают?

Полезность кодов ошибок SQL заключается в том, что программное обеспечение находит ваш код и указывает на него (пример). Вам не нужно самостоятельно вручную проверять тысячи строк кода. Представьте себе, что вы получаете только один код ошибки («Удачи в следующий раз, неудачник!» или «Кто научил вас программировать, лошадь?») и вам приходится заново проходить весь проект!

В некотором смысле коды ошибок — отличные маленькие помощники Санты: понятные, полезные и экономящие массу времени.Вам просто нужно познакомиться с ними.

Начиная с базового уровня, базы данных представляют собой наборы информации, собранные вместе и классифицированные. Тип, который нас интересует, — это реляционные базы данных, то есть существуют отношения между ячейками, в которых хранятся данные.

Например, у вас может быть целая группа студентов в университете, и вы хотите наградить всех, кто набрал более 90% на экзаменах, призом. Вы можете вручную написать их имена, пол, адреса, номера банковских счетов (все это связано, следовательно, реляционные базы данных), оценки, а затем вручную выбрать те, у кого высокие баллы.

Архаичный? Да, но вы будете удивлены, узнав, сколько компаний все еще ведут бизнес таким образом в 21 веке. На выполнение операций, на выполнение которых у компьютера уходят секунды, могут уйти месяцы. Особенно, если речь идет о сотнях или тысячах студентов.

Теперь, поместив всех этих студентов в базу данных, вы можете использовать такой язык, как SQL:

  SELECT * FROM Student WHERE Percentage>=90;  

Готово! Проблемы, однако, начинаются, когда вы пишете свой код.

Понятно, что это становится очень сложным, поэтому чем больше вы пишете, тем выше вероятность того, что ваш код содержит ошибки. Здесь наиболее полезными будут коды ошибок. Когда мы видим коды ошибок, мы должны быть благодарны (что не мешает нам каждый раз ругаться на них). Они делают всю работу за вас, и все, что вам нужно сделать, это обратиться к источнику и решить проблему.

Расскажите мне подробности!

Если база данных не дает желаемых результатов, выдается код ошибки.Это помогает определить проблему и способы ее устранения. Коды ошибок SQL, подобные приведенным ниже, будут полезны при устранении любых проблем с базами данных:

.

Сообщения об ошибках базы данных Oracle9i

Версия 2 (9.2)

ORA-00904: «указанное количество строк превышает максимальное».

ORA-00900: «недостаточно прав на объект».

ORA-00900: «неверный оператор SQL».

ORA-00902: «недопустимый тип данных».

У нас есть много разных типов ошибок в SQL. Но если вы не собираетесь оформлять их в рамку и вешать на стену, нужно знать, как с ними обращаться. Хорошо, что ошибки SQL содержат ссылку на точное местонахождение ошибки в коде, а также предоставляют информацию о том, что не так.

Начнем с простейшего примера ошибки:

ORA-00900: «неверный оператор SQL».

Как вы, наверное, догадались, нужно правильно написать команду.Где-то может быть опечатка или запятая. Или, в зависимости от обстоятельств, вам может потребоваться установка дополнительного программного обеспечения:

«Эта инструкция не распознана как допустимая инструкция SQL.

Эта ошибка может возникнуть, если процедурный параметр не установлен и выполняется оператор SQL, требующий этого параметра (например, оператор CREATE PROCEDURE). Вы можете определить, установлена ​​ли процедурная опция, запустив SQL*Plus.Если баннер PL/SQL не отображается, опция не установлена.

Действие: исправьте синтаксис или установите процедурный вариант».

То же самое касается типа форматирования или размещения неправильных типов данных там, где они не принадлежат:

ORA-00902 недопустимый тип данных

«Причина: Тип данных, введенный в операторе CREATE или ALTER TABLE, недопустим.

Действие: Исправьте синтаксис».

Дополнительную информацию можно найти в документации Oracle.

Коды ошибок

SQL — наиболее распространенный способ отладки SQL-запросов. Всякий раз, когда вы запрашиваете базу данных и возникает проблема, механизм базы данных генерирует код ошибки SQL. Эти коды представляют местонахождение проблемы в запросе и дают программистам информацию о том, как ее исправить или как интерпретировать ее причину.

Основные типы ошибок

Ошибки формата

Например, когда вы используете SELECT, вам нужно следовать за ним в определенной последовательности (перечислите столбцы в таблице, в которой указаны наши студенты и их оценки), затем звездочка.Если вы не следуете формату, поменяйте местами звездочку и запятую, вы получите сообщение об ошибке.

«если есть НАЧАЛО ТРАНЗАКЦИИ, она всегда должна заканчиваться транзакцией COMMIT или ROLLBACK».

Другой пример: после FROM вы используете такие операторы, как WHERE, для которых требуется условие. Это может быть любое условие, в том числе условия, которые извлекают данные, например, все учащиеся с оценками ниже 30. Если вы оставите это поле пустым, вы получите ошибку формата.

Ошибка оператора

Команды должны быть совместимы с SQL.Вы можете включить SUM и COUNT с WHERE. В противном случае вы получите ошибку.

Процедурные ошибки

Процедурный код — это код, хранящийся на сервере, который вы можете использовать для своих целей с небольшими изменениями.

«Хранимая процедура — это подготовленный код SQL, который вы можете сохранить, чтобы этот код можно было использовать снова и снова… Поэтому, если у вас есть SQL-запрос, который вы пишете снова и снова, сохраните его как хранимую процедуру и затем просто вызовите его, чтобы выполнить». ( Школы W3 )

Чтобы создать хранимую процедуру из таблицы с именем Customers со всеми ее записями и выполнить ее, у нас есть следующий код:

  СОЗДАТЬ ПРОЦЕДУРУ SelectAllCustomers
ТАК КАК
ВЫБЕРИТЕ * ИЗ клиентов
ИДТИ;

EXEC ВыбратьВсеКлиенты;
  

Другими словами, процедуры подобны шаблонам, хранящимся на сервере, которые можно брать, изменять и использовать по мере необходимости.

Процедурные ошибки являются более или менее обычным видом ошибок. Разница в том, что они относятся не к одной строчке кода, а ко всей процедуре (шаблону), которую вы взяли и попытались немного изменить.

Представьте, что у вас есть две таблицы, одна пустая, а другая полная. Вы применяете приведенный ниже код к пустой таблице:

  INSERT для передачи данных
ВЫБЕРИТЕ и ГДЕ выбрать данные
  

Примером стратегической ошибки может быть использование таких операторов, как операторы IN и NOT IN.Это заманчиво, но не очень хорошо оптимизировано (использование JOIN — гораздо лучший стратегический выбор).

Фатальные и нефатальные ошибки

База данных, такая как MySQL или PostgreSQL, хранит данные в таблицах, состоящих из строк и столбцов. Запросы к базе данных — это команды SQL, которые сообщают базе данных, что делать с ее данными. Они могут быть такими же простыми, как выбор всех записей из таблицы, или достаточно сложными, чтобы создать совершенно новую таблицу.

Существует два типа ошибок, которые могут возникнуть при использовании этих команд: фатальные и нефатальные.

Фатальная ошибка останавливает выполнение оператора, а нефатальная ошибка — нет.

Неустранимая ошибка — это ошибка базы данных, которую невозможно исправить. Нефатальная ошибка — это проблема, которую можно решить каким-либо образом, например, перезапустив службу SQL Server или экземпляр SQL Server.

База данных может иметь как фатальные, так и не фатальные ошибки в любой момент времени по многим причинам. Иногда, если вы знаете о проблеме, ее можно решить без особых трудностей.В другой раз не очень.

Наиболее распространенный тип ошибки — это синтаксис или другая проблема времени выполнения с системой базы данных, которая обращается к данным из таблицы SQL. Эти ошибки можно обнаружить при тестировании перед запуском кода. Вы можете убедиться, что все работает правильно при выполнении в системе базы данных.

Создание кодов ошибок с помощью RAISERROR

«Существует функция RAISERROR, которую можно использовать для генерации наших пользовательских сообщений об ошибках, что является отличным способом перевести запутанные сообщения об ошибках в нечто более осмысленное, понятное людям.

Функция RAISERROR — это системная команда сервера SQL, которая может вызвать сообщение об ошибке. Вы можете использовать его для индикации ошибок, предупреждений или информационных сообщений.

Ошибки могут быть вызваны программистом или самим SQL Server. Это полезно для предоставления обратной связи, когда что-то идет не так, а также когда что-то должно произойти, не прерывая выполнение других операторов в пакете.

Используйте следующий синтаксис:

  RAISERROR ([номер_ошибки], [сообщение], [состояние])  

Вы также можете применить RAISERROR либо для прекращения выполнения оператора, либо для передачи ошибок, сгенерированных операторами SQL, другому приложению.Например, вы можете создать сообщение об ошибке, которое приведет к остановке выполнения текущего пакета или инструкции, а также отобразит указанное сообщение.

Чаще всего оператор RAISERROR используется для создания сообщения об ошибке, когда данные не соответствуют некоторым критериям, например, при вводе слишком большого количества символов в поле, которое допускает ввод только 50 символов.

Raiserror(msg) полезен для обработки ошибок, возникающих во время обработки, и не требует сбоя всей транзакции из-за одной отдельной ошибки.

Теперь вы можете создать сколько угодно собственных ошибок. Радуйтесь!

Работа с ошибками

Чтобы справиться с ошибками, мы должны уметь их контролировать и узнавать всю связанную с ними информацию. Это необходимо для любого более сложного случая, чем опечатка PRINT в «Hello World».

Одним из полезных способов обнаружения ошибок является использование TRY…CATCH. Этот инструмент позволяет вам взять свой код и поместить его в среду, где его можно будет проверить и безопасно обработать.Там вы можете извлечь данные из него. Решите, хотите ли вы сообщить об ошибке, узнать о ней больше или исправить ее.

Эта изолированная программная среда SQL-сервера выглядит следующим образом:

  НАЧАТЬ ПОПРОБУЙ
 --код, чтобы попробовать
КОНЕЦ ПОПЫТКИ
НАЧАТЬ ЛОВИТЬ
 --code для запуска в случае возникновения ошибки
--генерируется в попытке
КОНЦЕВОЙ ЗАХВАТ
  

Код, который вы хотите просмотреть, находится между BEGIN TRY и END TRY. Если случаются ошибки, они передаются оператору CATCH. Это дает нам много полезной функциональности:

  • ERROR_NUMBER возвращает внутренний номер ошибки.
  • ERROR_STATE возвращает информацию об источнике.
  • ERROR_LINE возвращает номер строки, в которой произошла ошибка
  • ERROR_PROCEDURE возвращает имя хранимой процедуры или функции
  • ERROR_MESSAGE возвращает наиболее важную информацию, а именно текст сообщения об ошибке.

Вот что мы получим, если попытаемся разделить 1 на 0:

  ИСПОЛЬЗОВАНИЕ AdventureWorks2014
ИДТИ
-- Базовый пример TRY...CATCH
 
НАЧАТЬ ПОПРОБУЙТЕ
-- Генерировать ошибку деления на ноль
  ВЫБРАТЬ
    1/0 Ошибка AS;
КОНЕЦ ПОПЫТКИ
НАЧАТЬ ЛОВИТЬ
  ВЫБРАТЬ
    ERROR_NUMBER() КАК ErrorNumber,
    ERROR_STATE() КАК ErrorState,
    ERROR_SEVERITY() AS ErrorSeverity,
    ERROR_PROCEDURE() КАК ErrorProcedure,
    ERROR_LINE() КАК ErrorLine,
    ERROR_MESSAGE() AS ErrorMessage;
КОНЦЕВОЙ ЗАХВАТ;
ИДТИ
  

Как видите, функция TRY…CATCH очень полезна.

Резюме

Теперь вы точно знаете, что такое код ошибки SQL, какие существуют типы ошибок, почему они возникают, как они изолированы и изучаются, как создавать свои сигналы ошибок и т. д. Вы гораздо больше, чем просто готовы иметь дело с ошибками ! Если нет, дайте нам знать, и мы выпустим больше руководств в будущем. Удачи!

(Посетили 542 раза, 2 посещения сегодня)

Теги: ошибки sql, сервер sql Последнее изменение: 16 сентября 2021 г.

Коды ошибок SQL DB2 — TutorialBrain

. . . .
-84 DB2 не может принять этот оператор SQL.PREPARE или EXECUTE IMMEDIATE Оператор SQL не может быть подготовлен

Исправление :
Проверьте источник SQL-запроса.

-101 Оператор SQL превышает максимальный предел.

Исправление :
Разбейте большие операторы SQL на более мелкие, чтобы снизить сложность.

-104 Код ошибки DB2 sql 104 возникает из-за недопустимого маркера символа

Исправление :
В указанном маркере проверьте оператор SQL.

-105 Оператор SQL содержит недопустимую строку.

Исправление :
Убедитесь, что формат строки правильный.

-111 Функция столбца, такая как SUM, MAX, AVG и т. д., недействительна, так как она не включает имя столбца в свой операнд.

Исправление :
Упомяните имя столбца в качестве операнда его функции.

-117 Количество столбцов и количество вставляемых значений не совпадают.

Исправить :
Установите такое же количество значений, как и количество столбцов.

-119 Столбец в предложении HAVING отсутствует в предложении GROUP BY.

Исправление :
Добавьте этот столбец в предложение «GROUP BY».

-121 Имя столбца встречается более одного раза при определении оператора INSERT или UPDATE.

Исправление :
Следовательно, исправьте оператор SQL.

-172 Недопустимое имя функции.

Исправление :
Поэтому вам необходимо исправить имя функции.

-180 DB2 SQLCODE 180 указывает на недопустимый синтаксис строки, представляющей значение DATETIME.

Fix :
Следовательно, проверьте значение даты и времени и его тип данных.

-203 Неоднозначная ссылка на имя столбца.

Исправление :
Дополните неоднозначное имя столбца правильным именем таблицы.

-206 Если оператор SQL пытается использовать INSERT , UPDATE или SELECT для имени столбца, который не является частью таблицы, генерируется этот код ошибки SQL DB2.

Исправление :
Проверьте имена столбцов, используемые в операторах INSERT и UPDATE. В случае SELECT проверьте имена столбцов в пункте FROM

-208 Предложение ORDER BY неверно, так как имя столбца не является частью таблицы результатов.

Исправление :
Удалите имя столбца из предложения ORDER BY или добавьте требуемое имя столбца в таблицу результатов.

-302 SQLCODE 302 означает —
  • Либо тип столбца и длина значения в нем не синхронизированы, либо
  • Тип данных и номер позиции переменной хоста не синхронизированы

    Исправление :
    SQLcode 302 немного сбивает с толку, вам нужно проверить, содержат ли переменные хоста допустимое значение.

  • -305 Вы не можете присвоить значение NULL выходной переменной хоста без использования индикатора null.

    Исправление :
    Проверьте инструкцию FETCH или SELECT и используйте переменные-индикаторы null для всех тех переменных хоста, которые могут принимать значения NULL.

    -312 Переменная хоста непригодна для использования или не объявлена.

    Исправление :
    Проверьте правильность объявления переменных хоста.Кроме того, свойства переменной должны быть совместимы с использованием переменной в операторе SQL

    -313 Количество переменных хоста, присутствующих в операторе OPEN или EXECUTE, не соответствует количеству маркеров параметров в операторе SQL. Маркером параметра является вопросительный знак.

    Fix :
    Короче говоря, правильно сопоставьте эти значения.

    -407 Имя столбца, объявленное как NOT NULL, получило значение NULL после инструкции UPDATE или INSERT.

    Исправление :
    Проверьте все столбцы NOT NULL и выполните корректирующие действия.

    -501 DB2 sqlcode 501 возникает, когда программа пытается извлечь или закрыть еще не открытый курсор.

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

    -502 Программа попыталась открыть уже открытый курсор.

    Исправление :
    Проверьте все предыдущие шаги, правильно ли закрыт курсор.

    -503 Программа не может обновить столбец, так как имя этого столбца отсутствует в предложении FOR UPDATE инструкции SELECT курсора.

    Исправление :
    Добавьте имя столбца в предложение FOR UPDATE курсора.

    -504 Имя курсора не определено и не объявлено.

    Исправление :
    Сначала объявите имя курсора.

    -507 Программа попыталась запустить курсор UPDATE или DELETE, даже не открыв курсор.

    Fix :
    Сначала откройте курсор.

    -509 Имя таблицы в предложении UPDATE или DELETE не совпадает с именем таблицы, которое используется при объявлении курсора.

    Исправление :
    Имя таблицы в предложении UPDATE или DELETE должно совпадать с именем таблицы, которое используется при определении курсора.

    -530 Программа попыталась использовать ВСТАВКУ или ОБНОВЛЕНИЕ для ВНЕШНЕГО КЛЮЧА, который был недействителен, поскольку это значение не соответствовало первичному ключу его родительской таблицы.

    Fix :
    Сопоставьте обновленное или вставьте значение внешнего ключа с любым первичным ключом. Это означает, что обновленное или вставленное значение внешнего ключа должно присутствовать в родительской таблице в позиции первичного ключа

    -531 Не удалось выполнить ОБНОВЛЕНИЕ первичного ключа в родительской таблице, так как в нем есть зависимые строки.

    Исправление :
    Проверьте взаимосвязь первичного ключа с зависимыми от него строками.

    -539 Внешний ключ попытался сослаться на родительскую таблицу, но родительская таблица не имеет первичного ключа.

    Исправление :
    Либо добавьте первичный ключ в родительскую таблицу, либо обратитесь к правильной таблице с первичным ключом

    -540 Уникальный индекс или первичный индекс не определен для первичного ключа перед ссылкой на таблицу

    Исправление :
    Прежде чем ссылаться на таблицу, вы должны создать первичный индекс или уникальный индекс.

    -542 Отдельный столбец, который может содержать значения NULL, не может быть частью первичного ключа.

    Исправление :
    Убедитесь, что имя столбца, являющегося частью первичного ключа, определено как NOT NULL

    -602 CREATE INDEX содержит слишком много столбцов.

    Исправить :
    Уменьшить количество столбцов.

    -603 DB2 не может создать УНИКАЛЬНЫЙ ИНДЕКС, поскольку для имени столбца, который требуется в качестве уникального индекса, присутствуют повторяющиеся записи.

    Исправление :
    Удалите повторяющиеся записи в требуемом столбце, который должен быть уникальным индексом.

    -612 При создании таблицы, представления или индекса вы указали повторяющееся имя столбца.

    Fix :
    Следовательно, вы должны указать только уникальные имена столбцов.

    -613 Либо первичный ключ содержит слишком много столбцов, либо первичный ключ слишком длинный.

    Исправить :
    Уменьшить количество столбцов и при этом следить, чтобы длина столбца не была очень большой.

    -624 Таблица не может иметь более одного первичного ключа.

    Исправление :
    Не создавайте еще один первичный ключ для той же таблицы.

    -638 Вы попытались создать таблицу без добавления определений для столбцов.

    Исправление :
    Проверьте, не пропустили ли вы установку определений столбцов

    -680 Программа попыталась создать более 750 столбцов в таблице.

    Исправление :
    В таблицу нельзя добавить более 750 столбцов.

    -687 Вы пытаетесь сравнить 2 столбца с разными типами данных.

    Исправление :
    Проверьте оператор SQL на предмет сравнения несовместимых полей.

    -803 Вы попытались вставить или обновить повторяющееся значение в уникальном индексе.

    Исправление :
    Проверьте повторяющуюся запись и удалите ее.

    -805 Код SQLCode 805 очень распространен, и это происходит из-за того, что имя программы отсутствует в ПЛАНЕ

    Исправление :
    Правильно привяжите программу к плану.

    -811 Код ошибки SQL 811 также является распространенной ошибкой. Либо оператор SELECT вернул более одной строки, либо базовый предикат содержит подзапрос, результатом которого является более одного значения

    Fix :
    Итак, лучше правильно привязать программу к плану.

    -818 TIMESTAMP внутри LOAD MODULES, сгенерированного PreCompiler, отличается от TIMESTAMP внутри DBRM, созданного во время BIND.

    Исправление :
    Следовательно, снова привяжите программу.

    -901 Не удалось выполнить оператор SQL из-за системной ошибки

    Исправление :
    Узнайте у администратора баз данных или группы системных программистов, почему произошла системная ошибка.

    -904 Оператор SQL не выполнен из-за того, что ресурс недоступен

    Исправление :
    Проверьте журналы ошибок, чтобы узнать, какой ресурс недоступен, и одновременно уведомите администратора баз данных.

    -905 Когда программа пытается использовать ресурс в течение очень долгого времени, лимит ресурсов исчерпан и прикладная программа дает сбой

    Исправление :
    Проверьте, почему инструкция SQL превышает максимальное время использования ресурса.Кроме того, вы должны оптимизировать SQL-запрос, индексирование и т. д.

    -909 Приложение могло отбросить таблицу или индекс и попытаться получить доступ к таблице или индексу соответственно, но это не удается, поскольку таблица или индекс уже удалены.

    Исправить :
    Исправьте прикладную программу.

    -911 Db2 SQLCODE 911 является распространенной ошибкой, которая является проблемой DEADLOCK или TIMEOUT. Выполнение завершается со сбоем, и работа откатывается до последней фиксации.

    Исправление :
    В частности, вы можете изменить логику для фиксации частоты. Кроме того, вы можете избежать более частого использования очень занятого ресурса.

    -913 Сбой выполнения из-за DEADLOCK или TIMEOUT

    Исправление :
    Разработайте логику, чтобы можно было зафиксировать или откатить работу к последней фиксации в зависимости от логики.

    -922 Ошибка авторизации при подключении

    Исправление :
    Проверьте, авторизован ли план или есть ли у пользователя надлежащий доступ.Несмотря на эти меры предосторожности, если вы не можете решить проблему, вы должны привлечь команду администраторов баз данных DB2

    -923 Ошибка подключения

    Исправление :
    Обратитесь к группе сетевых подключений. В то же время вы можете связаться с администратором баз данных.

    -924 Код SQL 924 является внутренней ошибкой соединения с DB2

    Исправление :
    Обратитесь к группе администраторов баз данных по вопросу подключения

    Помощник SQL Server — сообщение об ошибке от 1 до 500

    Ошибка Серьезность Описание
    251 16 Не удалось выделить вспомогательную таблицу для оптимизации запросов.Максимум количество таблиц в запросе (%d) превышено.
    252 16 Рекурсивное общее табличное выражение «<Имя общего табличного выражения>» не содержит оператора UNION ALL верхнего уровня.
    253 16 Рекурсивный член общего табличного выражения «<Имя общего табличного выражения>» имеет несколько рекурсивных ссылок.
    254 16 Столбцы с префиксом не допускаются в списке столбцов оператора PIVOT.
    255 16 Псевдостолбцы не допускаются в списке столбцов оператора PIVOT.
    256 16 Тип данных int недопустим для подстроки функция. Допустимые типы: char/varchar, nchar/nvarchar и двоичный/варбинарный.
    257 16 Неявное преобразование из типа данных %ls в %ls не допускается.Использовать функцию CONVERT для запуска этого запроса.
    258 16 Не удается вызвать методы для %ls.
    259 16 Специальные обновления системных каталогов не включены. Система администратор должен перенастроить SQL Server, чтобы разрешить это.
    260 16 Запрещено неявное преобразование из типа данных %ls в тип данных %ls, таблица ‘%.*ls», столбец «%.*ls». Используйте функцию CONVERT для выполнения этого запроса.
    261 16 ‘%.*ls’ не является распознаваемой функцией.
    262 16 Отказано в разрешении %ls в базе данных «%.*ls».
    263 16 Необходимо указать таблицу для выбора.
    264 16 Имя столбца «%.*ls’ появляется более одного раза в столбце результатов список.
    265 16 Имя столбца «%.*ls», указанное в операторе %ls, конфликтует с существующим именем столбца в аргументе %ls.
    266 16 Счетчик транзакций после EXECUTE указывает, что COMMIT или Оператор ROLLBACK TRANSACTION отсутствует. Предыдущий счет = %ld, текущий счет = %ld.
    267 16 Не удается найти объект «%.*ls».
    268 16 Не удается запустить SELECT INTO в этой базе данных. Владелец базы данных должен запустите sp_dboption, чтобы включить эту опцию.
    270 16 Объект «%.*ls» не может быть изменен.
    271 16 SQL Server 2005, SQL Server 2008, SQL Server 2012 — столбец «<имя столбца>» нельзя изменить, поскольку он либо является вычисляемым столбцом, либо является результатом оператора UNION.
    SQL Server 2000 — столбец «<Имя столбца>» нельзя изменить, поскольку он является вычисляемым столбцом.
    272 16 Невозможно обновить столбец отметки времени.
    273 16 Невозможно вставить ненулевое значение в столбец отметки времени. Используйте ВСТАВИТЬ со списком столбцов или со значением по умолчанию NULL для столбца отметки времени.
    275 16 Префиксы не допускаются в столбцах значения или сводных столбцах оператора UNPIVOT.
    276 16 Псевдостолбцы нельзя использовать в качестве столбцов значений или сводных столбцов оператора UNPIVOT.
    277 16 Столбец «%.*ls» указан несколько раз в списке столбцов оператора UNPIVOT.
    278 16 Типы данных text, ntext и image нельзя использовать в GROUP BY. пункт.
    279 16 Недопустимые типы данных text, ntext и image в этом подзапросе. или обобщенное выражение.
    280 16 С TEXTPTR допустимы только столбцы text, ntext и image. функция.
    281 16 <Номер стиля> не является допустимым номером стиля при преобразовании из %ls в строка символов.
    282 10 Процедура «%.*ls» попыталась вернуть состояние NULL, что не допускается. Вместо этого будет возвращен статус 0.
    283 16 READTEXT нельзя использовать для вставленных или удаленных таблиц в ВМЕСТО триггера.
    284 16 Правила нельзя привязывать к типам данных text, ntext или image.
    285 16 Невозможно использовать операторы READTEXT, WRITETEXT и UPDATETEXT. с представлениями или функциями.
    286 16 Невозможно обновить логические таблицы INSERTED и DELETED.
    287 16 Оператор %ls не допускается в триггере.
    288 16 Функция PATINDEX работает с char, nchar, varchar, nvarchar, только типы данных text и ntext.
    290 16 Недопустимый оператор EXECUTE, использующий объект «%ls», метод «%ls».
    291 16 CAST или CONVERT: для типа «%.*ls» указаны недопустимые атрибуты
    292 16 Недостаточно места для результата для преобразования значения smallmoney в varchar/nvarchar.
    293 16 Невозможно преобразовать значение char в smallmoney.Значение char имеет неправильный синтаксис.
    294 16 Преобразование из типа данных char в тип данных smallmoney привело к ошибке переполнения smallmoney.
    295 16 Синтаксическая ошибка преобразования символьной строки в данные smalldatetime тип.
    296 16 Преобразование типа данных char в тип данных smalldatetime привело к выходу значения smalldatetime за пределы допустимого диапазона.
    297 16 У пользователя нет разрешения на выполнение этого действия.
    298 16 Преобразование типа данных datetime в тип данных smalldatetime привело к небольшой ошибке переполнения даты и времени.
    299 16 Функция DATEADD была вызвана с неверным типом %ls.
    300 14 Отказано в разрешении %ls для объекта «%.*ls», база данных «%.*ls».
    301 16 Запрос содержит недопустимый запрос внешнего соединения.
    302 16 Встроенная функция newsequentialid() может использоваться только в выражении DEFAULT для столбца типа ‘uniqueidentifier’ в операторе CREATE TABLE или ALTER TABLE.Его нельзя комбинировать с другими операторами для формирования сложного скалярного выражения.
    303 16 Таблица «%.*ls» является внутренним элементом предложения внешнего соединения. Этот не допускается, если таблица также участвует в обычном предложении соединения.
    304 16 «%d» находится за пределами допустимого диапазона для параметра индекса «%.*ls». См. параметр sp_configure «%ls» для допустимых значений.
    305 16 Тип данных XML нельзя сравнивать или сортировать, за исключением случаев использования оператора IS NULL.
    306 16 Типы данных text, ntext и image не могут сравниваться или отсортированы, за исключением случаев использования оператора IS NULL или LIKE.
    307 16 Идентификатор индекса %d в таблице ‘%.*ls’ (указанный в предложении FROM) делает не существует.
    308 16 Индекс «%.*ls» в таблице «%.*ls» (указанный в предложении FROM) не существует.
    309 16 Невозможно использовать индекс «%.*ls» для таблицы «%.*ls» в подсказке. XML-индексы не разрешены в подсказках.
    310 16 Значение <значение MAXRECURSION>, указанное для параметра MAXRECURSION, превышает допустимый максимум %d.
    311 16 Невозможно использовать столбцы text, ntext или image в столбцах ‘inserted’ и «удаленные» таблицы.
    312 16 Невозможно ссылаться на столбцы text, ntext или image в сохраненном фильтре процедура.
    313 16 Недостаточное количество аргументов. предоставляется для процедуры или функции %.* л.с.
    314 16 Нельзя использовать GROUP BY ALL со специальными таблицами INSERTED или DELETED.
    315 16 Индекс «%.*ls» в таблице «%.*ls» (указанный в предложении FROM) отключен или находится в файловой группе, которая не находится в сети.
    316 16 Идентификатор индекса %d в таблице «%.*ls» (указанный в предложении FROM) отключен или находится в файловой группе, которая не находится в сети.
    317 16 Функция «<имя функции>«, возвращающая табличное значение, не может иметь псевдоним столбца.
    318 16 Таблица (и ее столбцы), возвращаемые методом, возвращающим табличное значение, должны иметь псевдоним.
    319 16 Неверный синтаксис рядом с ключевым словом with. Если этот оператор является обычным табличным выражением, предложением xmlnamespaces или предложением контекста отслеживания изменений, предыдущий оператор должен заканчиваться точкой с запятой.
    320 16 Значение переменной времени компиляции для «%.*ls» в предложении OPTIMIZE FOR должно быть литералом.
    321 15 %.*ls не является распознаваемым параметром табличных подсказок. Если он предназначен для использования в качестве параметра функции, возвращающей табличное значение, или функции CHANGETABLE, убедитесь, что режим совместимости вашей базы данных установлен на 90.
    322 16 Переменная «%.*ls» указан в предложении OPTIMIZE FOR, но не используется в запросе.
    323 16 Предложение ‘COMPUTE’ не допускается в операторе, содержащем оператор INTERSECT или EXCEPT.
    324 15 Версия ALL оператора %.*ls не поддерживается.
    325 15 Неверный синтаксис рядом с ‘%.*лс’. Вам может потребоваться установить более высокий уровень совместимости текущей базы данных, чтобы включить эту функцию. См. справку для параметра SET COMPATIBILITY_LEVEL команды ALTER DATABASE.
    326 16 Составной идентификатор «%.*ls» неоднозначен. Оба столбца «%.*ls» и «%.*ls» существуют.
    327 16 Вызов функции «%.*ls» неоднозначен: существуют и определяемая пользователем функция, и вызов метода с таким именем.
    328 16 Не удалось сгенерировать план курсора для данного оператора, так как функция textptr() использовалась для столбца больших объектов из одной из базовых таблиц.
    329 16 Каждое выражение GROUP BY должно содержать хотя бы одну ссылку на столбец.
    330 15 Цель ‘<Имя объекта>‘ предложения OUTPUT INTO не может быть представлением или общим табличным выражением.
    331 15 Целевая таблица ‘‘ предложения OUTPUT INTO не может иметь включенных триггеров.
    332 15 Целевая таблица «» предложения OUTPUT INTO не может находиться ни на одной из сторон отношения (первичный ключ, внешний ключ). Найдено ссылочное ограничение «<Имя ограничения первичного ключа или внешнего ключа>».
    333 15 Целевая таблица ‘‘ предложения OUTPUT INTO не может иметь включенных проверочных ограничений или включенных правил.Найдено проверочное ограничение или правило «<Имя ограничения CHECK>».
    334 15 Целевая таблица ‘‘ оператора DML не может иметь никаких включенных триггеров, если оператор содержит предложение OUTPUT без предложения INTO. .
    335 16 Вызов функции нельзя использовать для сопоставления с целевой таблицей в предложении FROM оператора DELETE или UPDATE.Вместо этого используйте имя функции «%.*ls» без параметров.
    336 15 Неверный синтаксис рядом с «%.*ls». Если это обычное табличное выражение, вам необходимо явно завершить предыдущую инструкцию точкой с запятой.
    337 10 Предупреждение: значение с плавающей запятой «%.*ls» слишком мало. Он будет интерпретирован как 0.
    338 16 Операторы READEXT, WRITETEXT и UPDATETEXT нельзя использовать с представлениями, удаленными таблицами и вставленными или удаленными таблицами внутри триггеров.
    339 16 DEFAULT или NULL не разрешены в качестве явных значений идентификатора.
    340 16 Невозможно создать триггер «%.*ls» для представления «%.*ls». Триггеры AFTER не могут быть созданы для представлений.
    341 16 Процедуры фильтра репликации не могут содержать столбцы типа «большой объект», «большое значение», «XML» или «CLR».
    342 16 Столбец «%.*ls» недопустим в данном контексте, и пользовательская функция или агрегат «%.*ls» не найдены.
    343 16 Неизвестный тип объекта «%.*ls» используется в инструкции CREATE, DROP или ALTER.
    344 16 Ссылка на удаленную функцию «%.*ls» не разрешена, а имя столбца «%.*ls’ не найден или неоднозначен.
    345 16 Функция «%.*ls» не разрешена в предложении OUTPUT, так как она выполняет доступ к пользовательским или системным данным или предполагается, что она выполняет этот доступ. По умолчанию предполагается, что функция выполняет доступ к данным, если она не привязана к схеме.
    346 15 Параметр «<имя параметра>» нельзя объявить только для чтения, так как он не является параметром с табличным значением.
    347 16 Параметр «%.*ls» с табличным значением не может быть объявлен как параметр OUTPUT.
    348 16 Переменная таблицы «%.*ls» не может быть передана в хранимую процедуру с параметром OUTPUT.
    349 16 Процедура «%.*ls» не имеет параметра с именем «%.*ls».
    350 16 Столбец «%.*ls» не имеет допустимого типа данных. Столбец не может относиться к пользовательскому типу таблицы.
    351 16 Столбец, параметр или переменная %.*ls. : Не удается найти тип данных %.*ls.
    352 15 Табличный параметр «%.*ls» должен быть объявлен с опцией READONLY.
    353 16 Функция ‘%.*ls’ нельзя использовать в предложении %S_MSG, если предложение FROM содержит вложенную инструкцию INSERT, UPDATE, DELETE или MERGE. Это связано с тем, что функция выполняет доступ к пользовательским или системным данным или предполагается, что выполняет этот доступ. По умолчанию предполагается, что функция выполняет доступ к данным, если она не привязана к схеме.
    354 15 Цель «%.*ls» инструкции INSERT не может быть представлением или общим табличным выражением, если предложение FROM содержит вложенную инструкцию INSERT, UPDATE, DELETE или MERGE.
    355 15 Целевая таблица ‘‘ инструкции INSERT не может иметь никаких включенных триггеров, если предложение FROM содержит вложенную инструкцию INSERT, UPDATE, DELETE или MERGE.
    356 15 Целевая таблица «%.*ls» инструкции INSERT не может находиться ни на одной из сторон отношения (первичный ключ, внешний ключ), если предложение FROM содержит вложенную инструкцию INSERT, UPDATE, DELETE или MERGE.Найдено ссылочное ограничение ‘%ls’.
    357 15 Целевая таблица «%.*ls» инструкции INSERT не может иметь включенных правил, если предложение FROM содержит вложенную инструкцию INSERT, UPDATE, DELETE или MERGE. Найдено правило «%ls».
    358 15 В целевой таблице «%.*ls» инструкции MERGE не может быть включенных правил. Найдено правило «%ls».
    359 15 Цель «%.*ls’ предложения OUTPUT INTO имеет индекс с параметром ignore_dup_key и не может использоваться, когда также используется предложение OUTPUT.
    360 15 Список столбцов назначения оператора INSERT, UPDATE или MERGE не может содержать одновременно разреженный столбец и набор столбцов, содержащий разреженный столбец. Перепишите оператор, чтобы он включал либо разреженный столбец, либо набор столбцов, но не оба.
    361 16 Количество целевых столбцов, указанных в инструкции INSERT, UPDATE или MERGE, превышает максимальное значение %d.Это общее число включает идентификатор, отметку времени и столбцы со значениями по умолчанию. Чтобы исправить эту ошибку, измените запрос так, чтобы он нацеливался на набор разреженных столбцов вместо отдельных разреженных столбцов.
    362 16 Обработчик запросов не смог создать план запроса, так как имя «%.*ls» в подсказке FORCESEEK для таблицы или представления «<имя объекта>» не соответствует именам ключевых столбцов индекса «<имя индекса>«.
    363 16 Обработчик запросов не смог создать план запроса, поскольку указание FORCESEEK для таблицы или представления «<имя объекта>» нельзя использовать с %S_MSG, указанным индексом «%.*лс’.
    364 16 Обработчик запросов не смог создать план запроса, так как подсказка FORCESEEK для представления «<Имя представления>» используется без подсказки NOEXPAND. Повторите запрос с подсказкой NOEXPAND или удалите подсказку FORCESEEK в представлении.
    365 16 Обработчик запросов не смог создать план запроса, так как подсказка FORCESEEK для таблицы или представления «<имя объекта>» указала больше столбцов поиска, чем количество ключевых столбцов в индексе «%.*лс’.
    366 16 Обработчик запросов не смог создать план запроса, поскольку указание FORCESEEK для таблицы или представления «<имя объекта>» нельзя использовать с индексом хранилища столбцов «%.*ls».
    401 16 Нереализованный оператор или выражение %ls.
    402 16 Типы данных %s и %s несовместимы в операторе %s.
    403 16 Недопустимый оператор для типа данных. Оператор равен добавить, введите равно текст.
    404 16 Ссылка на столбец «inserted.%.*ls» недопустима, так как она ссылается на базовую таблицу, которая не изменяется в этом операторе.
    405 16 Удаленная таблица не может использоваться в качестве цели DML в инструкции, которая включает предложение OUTPUT или вложенную инструкцию DML.
    406 16 %ls нельзя использовать в операторе PIVOT, так как он не является инвариантным по отношению к значениям NULL.
    407 16 Внутренняя ошибка. Строковая процедура в файле %hs, строка %d завершилась с ошибкой, HRESULT 0x%x.
    408 16 В списке ORDER BY обнаружено константное выражение, позиция %i.
    409 16 Операция %ls не может принимать в качестве аргумента тип данных %ls.
    410 20 Предложение COMPUTE #%d ‘BY’, выражение #%d не в порядке список.
    411 16 Предложение COMPUTE #%d, агрегатное выражение #%d отсутствует в списке выбора список.
    412 16 Столбец «%.*ls» не подлежит обновлению, поскольку он производный или постоянный.
    413 16 Коррелированные параметры или подзапросы не поддерживаются встроенной функцией «%.*ls».
    414 16 ОБНОВЛЕНИЕ не разрешено, так как оператор обновляет представление «%.*ls», которое участвует в соединении и имеет триггер INSTEAD OF UPDATE.
    415 16 DELETE не разрешено, так как инструкция обновляет представление «%.*ls», которое участвует в объединении и имеет триггер INSTEAD OF DELETE.
    416 16 Очередь обслуживания «%.*ls» не может быть обновлена ​​напрямую.
    417 16 TOP не допускается в операторе UPDATE или DELETE для секционированного представления.
    418 16 Объекты, предоставляющие столбцы типа CLR, не допускаются в распределенных запросах. Используйте сквозной запрос для доступа к удаленному объекту «%.*ls».
    420 16 Типы данных text, ntext и image нельзя использовать в ЗАКАЗЕ пункт ПО.
    421 16 Тип данных text/ntext/image не может быть выбран как DISTINCT, так как он несопоставим.
    422 16 Общее табличное выражение определено, но не используется.
    423 16 Методы типа данных Xml не поддерживаются в проверочных ограничениях. Создайте скалярную определяемую пользователем функцию, чтобы обернуть вызов метода. Ошибка произошла в таблице «%.*ls».
    424 16 Методы типа данных XML не поддерживаются в определениях вычисляемых столбцов табличных переменных и возвращаемых таблицах функций, возвращающих табличное значение.Ошибка произошла в столбце «%.*ls», таблице «%.*ls» в операторе %ls.
    425 16 Тип данных %ls принимающей переменной не равен типу данных %ls столбца «%.*ls».
    426 16 Длина %d принимающей переменной меньше длины %d столбца «%.*ls».
    427 20 Не удалось загрузить записи системных процедур для идентификатора ограничения %d в идентификатор базы данных %d.
    428 20 Не удалось найти строку в sysconstraints для идентификатора ограничения %d в идентификатор базы данных %d.
    429 20 Не удалось найти новый идентификатор ограничения %d в sysconstraints, идентификатор базы данных %d во время компиляции.
    430 20 Не удалось разрешить имя таблицы для идентификатора объекта %d, идентификатор базы данных %d, при компиляции внешнего ключа.
    431 19 Не удалось привязать ограничение внешнего ключа. Слишком много таблиц задействовано в запрос.
    432 16 Методы типа данных Xml больше не поддерживаются в проверочных ограничениях. Отбросьте ограничение или создайте скалярную определяемую пользователем функцию, чтобы обернуть вызов метода. Ошибка произошла в таблице «%.*ls».
    433 20 Не удалось найти ограничение CHECK для «%.*ls’, хотя таблица помечен как имеющий один.
    434 16 Функция «%ls» не разрешена в предложении OUTPUT.
    435 16 Методы типа данных Xml не поддерживаются в определениях вычисляемых столбцов. Создайте скалярную определяемую пользователем функцию, чтобы обернуть вызов метода. Ошибка произошла в столбце «%.*ls», таблице «%.*ls» в операторе %ls.
    436 20 Не удалось открыть ссылочную таблицу с идентификатором %d в базе данных с идентификатором %d.
    437 20 Не удалось разрешить имя столбца, на который указывает ссылка, в таблице с идентификатором %d.
    438 20 Не удалось разрешить имя ссылающегося столбца в таблице с идентификатором %d.
    439 20 Не удалось найти ограничения FOREIGN KEY для таблицы ‘%.*ls в идентификатор базы данных %d, хотя таблица помечена как имеющая их.
    440 16 Внутренняя ошибка компиляции запроса. Не удалось обработать переполнение стека.
    441 16 Невозможно использовать функцию ‘%ls’ на удаленном источнике данных.
    442 16 Аргумент NEST должен быть ссылкой на столбец.Выражения не допускаются.
    443 16 Недопустимое использование ‘getdate’ в функция.
    Недопустимое использование INSERT внутри функции.
    Недопустимое использование ‘UPDATE’ внутри функции.
    444 16 Операторы Select, включенные в функцию, не могут возвращать данные в клиент.
    445 16 Предложение COLLATE нельзя использовать в выражениях, содержащих COLLATE. пункт.
    446 16 Не удается разрешить конфликт сортировки для операции %ls.
    447 16 Тип выражения %ls недопустим для условия COLLATE.
    448 16 Неверное сопоставление «%.*ls».
    449 16 Конфликт сортировки, вызванный предложениями сортировки с разными сопоставление «%.*ls’ и ‘%.*ls’.
    450 16 Переводы кодовых страниц не поддерживаются для текстового типа данных. От: %d Кому: %d.
    451 16 Не удается разрешить конфликт сортировки для столбца %d в операторе %ls.
    452 16 Предложение COLLATE нельзя использовать для пользовательских типов данных.
    453 16 Сопоставление «%.*ls» поддерживается только для типов данных Unicode и нельзя задать на уровне базы данных или сервера.
    454 16 Аргумент UNNEST должен быть вложенным столбцом таблицы.
    455 16 Последний оператор, включенный в функцию должен быть оператор возврата.
    456 16 Невозможно выполнить неявное преобразование значения %ls в %ls потому что результирующая сортировка не разрешена из-за конфликта сортировки.
    457 16 Невозможно выполнить неявное преобразование значения %ls в %ls потому что сопоставление значения не разрешено из-за конфликта сопоставления.
    458 16 Не удается создать целевую таблицу SELECT INTO «%.*ls», так как столбец xml «%.*ls» типизирован с коллекцией схем «%.*ls» из базы данных «%.*ls». Столбцы XML не могут ссылаться на схемы в разных базах данных.
    459 16 Сопоставление «%.*ls» поддерживается только для типов данных Unicode и не может применяться к типам данных char, varchar или text.
    460 16 Оператор DISTINCT не разрешен в рекурсивной части рекурсивного общего табличного выражения «<Имя общего табличного выражения>».
    461 16 Оператор TOP не разрешен в рекурсивной части рекурсивного общего табличного выражения «<имя общего табличного выражения>».
    462 16 Внешнее соединение не разрешено в рекурсивной части рекурсивного общего табличного выражения ‘‘.
    463 16 Функции с параметрами не допускаются в рекурсивной части рекурсивного общего табличного выражения «%.*лс’.
    464 16 Функции с побочными эффектами не разрешены в рекурсивной части рекурсивного общего табличного выражения «%.*ls».
    465 16 Рекурсивные ссылки не допускаются в подзапросах.
    466 16 Оператор UNION не разрешен в рекурсивной части рекурсивного общего табличного выражения «%.*лс’.
    467 16 Функции GROUP BY, HAVING или агрегатные функции не допускаются в рекурсивной части рекурсивного общего табличного выражения ‘<Имя CTE>‘.
    468 16 Не удается разрешить конфликт сортировки между «%.*ls» и «%.*ls» в операции %ls.
    469 16 Для целевой таблицы «%.» должен быть указан явный список столбцов.*ls’, когда используется табличная подсказка KEEPIDENTITY и таблица содержит столбец идентификаторов.
    470 16 Синоним «» ссылается на синоним ««. Цепочка синонимов не допускается.
    471 16 Можно указать только один из трех параметров: SINGLE_BLOB, SINGLE_CLOB или SINGLE_NCLOB.
    472 16 Должен быть указан либо файл форматирования, либо один из трех параметров SINGLE_BLOB, SINGLE_CLOB или SINGLE_NCLOB.
    473 16 В операторе PIVOT указано неверное значение «%.*ls».
    474 16 Не удалось загрузить определения вычисляемых столбцов для таблицы «%.*ls».
    475 16 Неверное предложение SAMPLE. Можно выбирать только имена таблиц в предложении FROM запросов SELECT, UPDATE и DELETE.
    476 16 Недопустимый размер таблицы PERCENT «» для таблицы ««. Размер таблицы PERCENT должен быть в диапазоне от 0 до 100.
    477 16 Недопустимое значение ROWS или начальное число REPEATABLE в предложении TABLESAMPLE для таблицы ««. Значение или начальное число должно быть целым числом. .
    478 16 Предложение TABLESAMPLE нельзя использовать в определении представления или встроенной табличной функции.
    479 16 Недопустимое значение ROWS или начальное число REPEATABLE «%I64d» в предложении TABLESAMPLE для таблицы «%.*ls». Значение или начальное значение должно быть больше 0,
    480 16 Предложение TABLESAMPLE нельзя использовать с табличной функцией «%.*ls».
    481 16 Предложение TABLESAMPLE нельзя использовать с таблицей связанного сервера «%.*лс».
    482 16 Неконстантное или недопустимое выражение находится в предложении TABLESAMPLE или REPEATABLE.
    483 16 Предложение OUTPUT нельзя использовать в инструкции INSERT…EXEC.
    484 16 Невозможно объявить более %d локальных переменных.
    485 16 Представления и встроенные функции не могут возвращать столбцы xml, типизированные с коллекцией схем, зарегистрированной в базе данных, отличной от текущей.Столбец «%.*ls» типизирован коллекцией схем «%.*ls», которая зарегистрирована в базе данных «%.*ls».
    486 16 %.*ls не позволяет указывать имя схемы в качестве префикса имени сборки.
    487 16 Для оператора «%.*ls» указан недопустимый параметр.
    488 16 %s столбцы должны быть сопоставимы.Тип столбца «%.*ls» — «%s», что несопоставимо.
    489 16 Предложение OUTPUT нельзя указать, так как целевое представление «%.*ls» является секционированным представлением.
    490 16 Функция повторной синхронизации временно отключена.
    491 16 Имя корреляции должно быть указано для массового набора строк в предложении from.
    492 16 Повторяющиеся имена столбцов не допускаются в наборах результатов, полученных с помощью OPENQUERY и OPENROWSET. Имя столбца «%.*ls» является дубликатом.
    493 16 Столбец «%.*ls», возвращенный методом nodes(), нельзя использовать напрямую. Его можно использовать только с одним из четырех методов типа данных XML: exists(), nodes(), query() и value(), или в проверках IS NULL и IS NOT NULL.
    494 16 Предложение TABLESAMPLE можно использовать только с локальными таблицами.
    495 16 Тип столбца возвращаемой таблицы «%.*ls» не совпадает с типом, с которым он был создан. Отбросьте и заново создайте модуль, используя имя типа, состоящее из двух частей, или используйте sp_refreshsqlmodule для обновления метаданных его параметров.
    496 16 Параметр «%.*ls» не совпадает с типом, с которым он был создан. Удалите и заново создайте модуль, используя имя типа, состоящее из двух частей, или используйте sp_refreshsqlmodule для обновления метаданных его параметров.
    497 16 Использование переменных в предложениях TABLESAMPLE и REPEATABLE запрещено.
    498 16 Недопустимое значение в предложении TABLESAMPLE или REPEATABLE.
    499 16 Неверный параметр для функции getchecksum.
    500 16 Попытка передать параметр, возвращающий табличное значение, с %d столбцами, где для соответствующего пользовательского типа таблицы требуется %d столбцов.

    Как реализовать обработку ошибок в SQL Server

    Обзор обработки ошибок

    Обработка ошибок в SQL Server дает нам контроль над кодом Transact-SQL. Например, когда что-то идет не так, у нас есть шанс что-то с этим сделать и, возможно, снова все исправить.Обработка ошибок SQL Server может быть такой же простой, как просто регистрация того, что что-то произошло, или это может быть попытка исправить ошибку. Это может быть даже перевод ошибки на язык SQL, потому что мы все знаем, как технические сообщения об ошибках SQL Server могут быть бессмысленными и трудными для понимания. К счастью, у нас есть возможность перевести эти сообщения во что-то более значимое, чтобы передать их пользователям, разработчикам и т. д.

    В этой статье мы подробно рассмотрим оператор TRY… CATCH: синтаксис, как он выглядит, как работает и что можно сделать при возникновении ошибки.Кроме того, этот метод будет объяснен на примере SQL Server с использованием группы операторов/блоков T-SQL, что в основном является способом обработки ошибок SQL Server. Это очень простой, но структурированный способ сделать это, и как только вы его освоите, во многих случаях он может оказаться весьма полезным.

    Кроме того, есть функция RAISERROR, которую можно использовать для создания собственных пользовательских сообщений об ошибках, что является отличным способом перевести запутанные сообщения об ошибках во что-то более осмысленное, понятное людям.

    Обработка ошибок с помощью TRY…CATCH


    Вот как выглядит синтаксис. Это довольно просто освоить. У нас есть два блока кода:

    Начало попробовать

    — КОД, чтобы попробовать

    End True

    End Thire

    Начните запускаться

    —код, чтобы запустить, если ошибка возникает

    — сгенерировано в попытках

    .

    Все, что находится между BEGIN TRY и END TRY, — это код, который мы хотим отслеживать на наличие ошибок.Таким образом, если бы внутри этого оператора TRY произошла ошибка, управление сразу же было бы передано оператору CATCH, после чего он начал бы выполнение кода построчно.

    Теперь, внутри оператора CATCH, мы можем попытаться исправить ошибку, сообщить об ошибке или даже зарегистрировать ошибку, чтобы мы знали, когда это произошло, кто это сделал, записав имя пользователя и все полезные вещи. У нас даже есть доступ к некоторым специальным данным, доступным только внутри оператора CATCH:

    • ERROR_NUMBER — возвращает внутренний номер ошибки
    • ERROR_STATE — возвращает информацию об источнике
    • ERROR_SEVERITY — возвращает информацию обо всем, от информационных ошибок до ошибок, которые может исправить пользователь администратора баз данных, и т. д.
    • ERROR_LINE — возвращает номер строки, в которой произошла ошибка
    • ERROR_PROCEDURE — возвращает имя хранимой процедуры или функции.
    • ERROR_MESSAGE — возвращает самую важную информацию, а именно текст сообщения об ошибке.

    Это все, что нужно для обработки ошибок SQL Server. Все можно сделать с помощью простого оператора TRY и CATCH, и единственная часть, где это может быть сложно, — это когда мы имеем дело с транзакциями.Почему? Потому что если есть НАЧАЛО ТРАНЗАКЦИИ, она всегда должна заканчиваться транзакцией COMMIT или ROLLBACK. Проблема в том, что ошибка возникает после того, как мы начинаем, но до фиксации или отката. В этом конкретном случае есть специальная функция, которую можно использовать в операторе CATCH, которая позволяет проверить, находится ли транзакция в состоянии фиксации или нет, что затем позволяет нам принять решение об откате или фиксации ее.

    Давайте перейдем к SQL Server Management Studio (SSMS) и начнем с основ обработки ошибок SQL Server.В статье используется образец базы данных AdventureWorks 2014. Сценарий ниже настолько прост, насколько это возможно:

    1

    2

    3

    4

    5

    6

    7

    9

    9

    9

    9

    8

    9

    9

    10

    9

    10

    9

    11

    12

    13

    14

    15

    16

    17

    18

    19

    USE AdventureWorks2014

    GO

    — Базовый пример TRY…CATCH

     

    BEGIN TRY

    — Генерировать ошибку деления на ноль  

      SELECT

        1 / 0 AS Error;

    End True

    Начните CALL

    Выберите

    Выбрать

    ERROR_NUMBER () Как errornumber,

    ERROR_STATE () Как errorState,

    Error_severity () Как erromIseverity,

    Error_procedure () как CurricProcedure,

    ,

        ERROR_MESSAGE() AS ErrorMessage;

    КОНЦЕВОЙ ЗАХВАТ;

    ГО

    Это пример того, как это выглядит и как это работает.Единственное, что мы делаем в BEGIN TRY, — делим 1 на 0, что, конечно же, вызовет ошибку. Таким образом, как только этот блок кода сработает, он передаст управление блоку CATCH, а затем выберет все свойства с помощью встроенных функций, о которых мы упоминали ранее. Если мы выполним скрипт сверху, вот что мы получим:

    Мы получили две таблицы результатов из-за двух операторов SELECT: первая — это 1, деленная на 0, что вызывает ошибку, а вторая — это переданное управление, которое фактически дало нам некоторые результаты.Слева направо мы получили ErrorNumber, ErrorState, ErrorSeverity; в этом случае нет процедуры (NULL), ErrorLine и ErrorMessage.

    Теперь давайте сделаем что-то более значимое. Это умная идея — отслеживать эти ошибки. Вещи, которые подвержены ошибкам, должны быть зафиксированы в любом случае и, по крайней мере, зарегистрированы. Вы также можете поместить триггеры в эти зарегистрированные таблицы и даже настроить учетную запись электронной почты и проявить немного творчества, уведомляя людей о возникновении ошибки.

    Если вы не знакомы с электронной почтой базы данных, ознакомьтесь с этой статьей для получения дополнительной информации о системе электронной почты: Как настроить почту базы данных в SQL Server.

    Приведенный ниже сценарий создает таблицу с именем DB_Errors , которую можно использовать для хранения данных отслеживания:

    — Таблица для записи ошибок

    Создание таблицы db_errors

    (errorid int Идентификация (1, 1),

    Имя пользователя varchar (100),

    errornumber int,

    ErrorState INT,

    ErrorLine INT,

    ERRORPROCEDURE VARCHAR (MAX),

    Errormessage Varchar (Max),

    ErrordateTime TateTime)

    GO

    Здесь у нас есть простой столбец идентификаторов, за которым следует имя пользователя, поэтому мы знаем, кто сгенерировал ошибку, а остальное — это просто точная информация из встроенных функций, которые мы перечислили ранее.

    Теперь давайте изменим пользовательскую хранимую процедуру из базы данных и поместим туда обработчик ошибок:

    1

    2

    3

    4

    5

    6

    7

    9

    9

    9

    9

    8

    9

    9

    10

    9

    10

    9

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    ПРОЦЕДУРА ИЗМЕНЕНИЯ dbo.Addsale @employeeId int,

    @productiD int,

    @quantity smallint,

    @saleid univerentiledifier Выход

    AS

    SET @SaleID = NewID ()

    Начните попробовать

    Выбор

    @SaleID,

    @ProductiD,

    @ 3080802

    @ 3080802

    @ quantity

    End True

    Начните уловить

    Вставить в DBO.Db_Errors

    Значения

    (Suser_sname (),

    (),

    Error_number (),

    Error_State (),

    ERROR_SEVERITY (),

    ERROR_RUE_LINE (),

    ERROR_Messure (),

    GetDate ());

      КОНЦЕВОЙ ФИКСАТОР

    GO

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

    Быстрый оператор Select указывает, что запись была успешно вставлена:

    Однако, если мы вызовем вышеприведенную хранимую процедуру еще раз, передав те же параметры, сетка результатов будет заполнена по-другому:

    На этот раз в таблице результатов мы получили два показателя:

    0 строк затронуты — эта строка указывала, что на самом деле ничего не попало в таблицу «Продажи».

    1 строка затронута — эта строка указывает, что что-то вошло в нашу недавно созданную таблицу регистрации

    Итак, что мы можем здесь сделать, так это посмотреть на таблицу ошибок и посмотреть, что произошло.Простой оператор Select сделает эту работу:

    Здесь у нас есть вся информация, которую мы установили ранее для регистрации, только на этот раз мы также заполнили поле процедуры и, конечно же, «дружественное» техническое сообщение SQL Server о том, что у нас есть нарушение:

    Нарушение ограничения ПЕРВИЧНОГО КЛЮЧА «PK_Sales_1». Невозможно вставить повторяющийся ключ в объект «Продажи.Продажи». Повторяющееся значение ключа (20).

    Как это был очень искусственный пример, но дело в том, что в реальном мире передача недопустимой даты очень распространена.Например, передача несуществующего идентификатора сотрудника в случае, когда у нас настроен внешний ключ между таблицей «Продажи» и таблицей «Сотрудник», что означает, что «Сотрудник» должен существовать для создания новой записи в таблице «Продажи». Этот вариант использования приведет к нарушению ограничения внешнего ключа.

    Общая идея, стоящая за этим, состоит в том, чтобы не вывести ошибку из строя. Мы, по крайней мере, хотим сообщить человеку, что что-то пошло не так, а затем также зарегистрировать это под капотом. В реальном мире, если бы существовало приложение, полагающееся на хранимую процедуру, разработчики, вероятно, также где-то закодировали бы обработку ошибок SQL Server, потому что они знали бы, когда произошла ошибка.Здесь также было бы разумно передать сообщение об ошибке пользователю/приложению. Это можно сделать, добавив функцию RAISERROR, чтобы мы могли выдать нашу собственную версию ошибки.

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

    Расширенная обработка ошибок SQL


    Мы лишь вкратце упомянули сложные моменты с транзакциями, поэтому вот простой пример того, как с ними бороться. Мы можем использовать ту же процедуру, что и раньше, только на этот раз давайте обернем транзакцию вокруг оператора Insert:

    1

    2

    3

    4

    5

    6

    7

    9

    9

    9

    9

    8

    9

    9

    10

    9

    10

    9

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    21

    23

    24

    25

    25

    26

    27

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    ПРОЦЕДУРА ИЗМЕНЕНИЯ dbo.Addsale @employeeiD int,

    @productid int,

    @quantity Smallint,

    @saleid univerentiledifier Выход

    AS

    SET @SaleID = NewID ()

    Начните попытку

    начать транзакцию

    вставьте в продажи.

    Выбрать

    @saleid,

    @paleid,

    @productiD,

    @ 3080802

    @EmondityID,

    @Quantity

    Commit Transaction

    End Trine

    Начните вставить

    вставьте в DBO.Db_Errors

    Значения

    (Suser_sname (),

    (),

    Error_number (),

    Error_State (),

    ERROR_SEVERITY (),

    ERROR_RUE_LINE (),

    ERROR_Messure (),

    GetDate ());

    — транзакция незаметному

    , если (xact_state ()) = -1

    откатная транзакция

    — Communitable

    , если (xact_state ()) = 1

    Commit Commit

    ГО

    Таким образом, если внутри транзакции Begin все выполняется успешно, она вставит запись в Sales, а затем зафиксирует ее.Но если что-то пойдет не так до того, как произойдет коммит, и он передаст управление нашему Catch, возникает вопрос: как мы узнаем, коммитим мы или откатываем все это?

    Если ошибка несерьезна и находится в состоянии фиксации, мы все равно можем зафиксировать транзакцию. Но если что-то пошло не так и находится в состоянии uncommittable, то мы можем откатить транзакцию. Это можно сделать, просто запустив и проанализировав функцию XACT_STATE, которая сообщает о состоянии транзакции.

    Эта функция возвращает одно из следующих трех значений:

    1 – транзакция фиксируется

    -1 — транзакция незафиксирована и должна быть откатана

    0 – незавершенных транзакций нет

    Единственная загвоздка здесь заключается в том, чтобы не забыть сделать это внутри оператора catch, потому что вы не хотите запускать транзакции, а затем не фиксировать или откатывать их:

    Как, если мы выполним ту же хранимую процедуру, предоставляющую e.грамм. неверный EmployeeID мы получим те же ошибки, что и раньше, сгенерированные наизнанку таблицы:

    Мы можем сказать, что это не было вставлено, выполнив простой запрос Select, выбрав все из таблицы Sales , где EmployeeID равен 20 :

    Создание пользовательского сообщения об ошибке повышения уровня SQL

    Давайте подведем итоги и посмотрим, как мы можем создавать собственные пользовательские сообщения об ошибках.Это хорошо, когда мы знаем, что возможна ситуация, которая может произойти. Как мы упоминали ранее, возможно, что кто-то передаст недействительный идентификатор сотрудника. В этом конкретном случае мы можем сделать проверку до этого, и, конечно же, когда это произойдет, мы можем создать собственное пользовательское сообщение, например, сказать, что идентификатор сотрудника не существует. Это можно легко сделать, изменив нашу хранимую процедуру еще раз и добавив поиск в наш блок TRY:

    1

    2

    3

    4

    5

    6

    7

    9

    9

    9

    9

    8

    9

    9

    10

    9

    10

    9

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    21

    23

    24

    25

    25

    26

    27

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    ПРОЦЕДУРА ИЗМЕНЕНИЯ dbo.Addsale @employeeiD int,

    @productid int,

    @quantity smallint,

    @saleid univerentiledifier Выход

    AS

    SET @SaleID = newid ()

    Начните True

    , если (выберите счетчик (*) из человеческих .Employee E, где сотруднизуют = @EmployEyID) = 0

    RisingError («Сотрудничество не существует»., 11, 1)

    вставка в продажи

    Select

    @SaleID,

    @ProductiD,

               @employeeid,

               @quantity

      END TRY

      BEGIN CATCH

        INSERT INTO dbo.Db_Errors

    Значения

    (Suser_sname (),

    (),

    Error_number (),

    Error_State (),

    ERROR_SEVERITY (),

    ERROR_RUE_LINE (),

    ERROR_Messure (),

    GetDate ());

    9

    DECLARE @Message varchar (max) = error_message (),

    @sevity int = error_severity (),

    @state smallint = error_state ()

    RisingError (@message, @sevity, @state)

      КОНЦЕВОЙ ФИКСАТОР

    GO

    Если этот счетчик возвращается к нулю, это означает, что сотрудника с таким идентификатором не существует.Затем мы можем вызвать RAISERROR, где мы определяем определяемое пользователем сообщение, а также нашу пользовательскую серьезность и состояние. Таким образом, тому, кто использует эту хранимую процедуру, было бы намного проще понять, в чем проблема, а не видеть очень техническое сообщение об ошибке, которое выдает SQL, в данном случае о проверке внешнего ключа.

    С последними изменениями в нашей процедуре хранения в блоке Catch появился еще один RAISERROR. Если произошла другая ошибка, вместо того, чтобы пропустить ее, мы можем снова вызвать RAISERROR и точно передать то, что произошло.Вот почему мы объявили все переменные и результаты всех функций. Таким образом, он не только будет зарегистрирован, но и сообщит об этом приложению или пользователю.

    И теперь, если мы выполним тот же код, что и раньше, он будет зарегистрирован и также укажет, что идентификатор сотрудника не существует:

    Еще одна вещь, о которой стоит упомянуть, это то, что мы можем предопределить код, серьезность и состояние этого сообщения об ошибке. Существует хранимая процедура sp_addmessage, которая используется для добавления наших собственных сообщений об ошибках.Это полезно, когда нам нужно вызвать сообщение в нескольких местах; мы можем просто использовать RAISERROR и передать номер сообщения, а не вводить все заново. Выполнив выбранный ниже код, мы добавили эту ошибку в SQL Server:

    Это означает, что теперь вместо того, чтобы делать это так, как мы делали раньше, мы можем просто вызвать RAISERROR и передать номер ошибки, и вот как это выглядит:

    sp_dropmessage, конечно же, используется для сброса указанного пользовательского сообщения об ошибке.Мы также можем просмотреть все сообщения в SQL Server, выполнив запрос ниже:

    ВЫБЕРИТЕ * ИЗ master.dbo.sysmessages

    Их много, и вы можете увидеть наше пользовательское SQL-сообщение об ошибке повышения в самом верху.

    Я надеюсь, что эта статья была информативной для вас, и я благодарю вас за чтение.

    Каталожные номера

    Боян, также известный как «Бокси», выпускник AP в области ИТ-технологий, специализирующийся на сетях и электронных технологиях Копенгагенской школы дизайна и технологий, является аналитиком программного обеспечения с опытом в области обеспечения качества, поддержки программного обеспечения, продвижения продуктов и взаимодействия с пользователями.

    Он много писал для SQL Shack и ApexSQL Solution Center по различным темам, от клиентских технологий, таких как разрешение 4K и тематика, обработка ошибок до стратегий индексирования и мониторинга производительности.

    Боян работает в ApexSQL в Нише, Сербия, как неотъемлемая часть команды, занимающейся проектированием, разработкой и тестированием следующего поколения инструментов баз данных, включая MySQL и SQL Server, а также как автономных инструментов, так и интеграций в Visual Studio, SSMS. и VSCode.

    Подробнее о Бояне на LinkedIn

    Просмотреть все сообщения Бояна Петровича

    Последние сообщения Бояна Петровича (посмотреть все)

    Недопустимая ошибка SQL — OutSystems

    1. Последнее обновление
    2. Сохранить как PDF
    Без заголовков

    Шаблон:OutSystems/Documentation_KB/ContentCollaboration

  • Редактировать
  • Ошибка Invalid SQL выдается в следующих ситуациях:

    • <сущность> — неизвестная сущность в

      У вас есть SQL-запрос, использующий сущность, которой больше не существует.

      Исправьте SQL, связанный с этим запросом, чтобы использовать существующую сущность.

    • — неизвестный атрибут в

      В вашем приложении есть SQL-запрос, использующий несуществующий атрибут.

      Исправьте SQL, связанный с этим запросом, чтобы использовать существующий атрибут сущности.

    Чтобы узнать больше о SQL в OutSystems, ознакомьтесь со следующими бесплатными курсами:

    • Неизвестный параметр в

      В нашем приложении есть SQL-запрос, использующий несуществующий параметр.

      Выполните одно из следующих действий:

      • Исправьте SQL, связанный с этим запросом, чтобы использовать существующий параметр.
      • Изменить входные параметры запроса.
    • В <запросе> найдены параметры без разделяющих пробелов

      SQL-запрос использует параметры, не разделенные пробелами. Например: ВЫБЕРИТЕ @Параметр[email protected]Параметр2 .

      Исправьте SQL, связанный с этим запросом, чтобы входные параметры разделялись пробелами.

    • является зарезервированным префиксом в

      Вы используете системные таблицы в своем запросе SQL, и это не разрешено по соображениям безопасности. Системные таблицы запускаются со следующими префиксами: osusr_ , ossys_ и oslog_ . Если ваш запрос использует любой из этих префиксов в условии, например, отображается эта ошибка.

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

    • Структура вывода должна быть установлена ​​в

      Вы не определили структуру вывода для хранения результатов запроса.

      Отредактируйте запрос и задайте его структуру вывода.

    • Выходная структура не может содержать структуры с вложенными записями/списками

      SQL-запрос имеет структуру вывода с определением, содержащим вложенные записи или списки.

      Необходимо исправить структуру вывода запроса, выполнив одно из следующих действий:

      • Используйте другую структуру без вложенных элементов.
      • Переопределите эту структуру, чтобы избежать вложенных записей или списков.
    • Параметры с параметром «Расширить в строке», установленным на «Да», должны иметь тип данных «Текст»

      У вас есть запрос, в котором используются встроенные параметры, но их тип данных не является текстовым.

      Измените входные параметры этого запроса и выполните одно из следующих действий:

      • Установите свойство Expand Inline входного параметра.
      • Измените тип данных этого входного параметра на Текст.
    • В запросе «» внешние объекты находятся в разных базах данных: «<внешний объект 1>», «<внешний объект 2>»,… в «<подключение к базе данных A>»; '<Внешний объект 3>', '<Внешний объект 4>',... в '<Соединение с базой данных B>'; ...

      В запросе используются посторонние сущности, расположенные в разных базах данных. Каждый SQL-запрос может использовать только внешние объекты, расположенные в той же базе данных.

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

    • Невозможно использовать выходной параметр количества запросов. SQL-запрос '' должен быть оператором SELECT

      .

      Вы используете выходной параметр Count запроса SQL, который не может вернуть результат подсчета запроса, поскольку запрос не является оператором SELECT.

      Проверьте логику своего приложения, чтобы используемый вами запрос был оператором SELECT и, таким образом, заполнил счетчик запросов количеством записей.

    Дважды щелкните строку ошибки, чтобы перейти непосредственно к родительскому потоку действий и выделить SQL-запрос.

    Советы по устранению распространенных ошибок SQL в Looker

    Общие темы/вопросы:

     

    Вот список часто задаваемых вопросов, по которым нашим пользователям часто требуется поддержка, а также шаги по устранению неполадок, которые можно попробовать:

     

    1. Почему мой SQL-запрос работает медленно, даже если запросов нет в очереди на Looker?

    • Запуск по базе данных (или SQL Runner): проверьте, работает ли он быстро, чтобы увидеть, является ли это проблемой с базой данных или проблемой средства просмотра

      • Если запрос выполняется медленно как в SQL Runner, так и в базе данных, это означает, что запрос сам по себе медленный и что это не конкретно проблема Looker, а проблема с базой данных или проблема сложности запроса обязательно избегайте разветвлений

      • Откройте сгенерированный SQL в SQL Runner, чтобы проверить свой запрос

      2.У меня есть часть запроса, и я вижу ошибку в этом запросе. Как я могу узнать, какое поле вызывает ошибку?

      • Начните с упрощения запроса:

        • Удалите все фильтры и дополнительные поля, чтобы изолировать поле, вызывающее ошибку SQL

      • Откройте сгенерированный SQL в SQL Runner, чтобы проверить свой запрос/просмотреть более подробное сообщение об ошибке

      • Найдите в документации диалекта базы данных SQL функции, которые мы используем, чтобы убедиться, что мы используем правильный синтаксис

      • Проверьте, включено ли имя базы данных в ошибку, обнаруженную при исследовании.

        • Если это так, мы видим ошибку SQL и должны проверить наш SQL

        • Если это не так, мы смотрим на проблему LookML и должны проверить наш LookML

      • мы можем выполнить запрос в базе данных без ошибок?

      3. Почему сгенерированный SQL Looker отличается от того, который я обычно пишу?

      4. Что означает конкретная ошибка SQL? (функция отсутствует, несоответствие типов данных и т. д.)

      • Существует ли несоответствие типов данных между тем, что мы написали, и типами данных, которые требуются для функции, согласно документации диалекта базы данных?

      • Используем ли мы правильную функцию для диалекта базы данных?

      • Google ошибка: есть много онлайн форумов, которые могут предоставить контекст

      • Откройте сгенерированный SQL в SQL Runner, чтобы проверить ваш запрос

    конкретные / общие ошибки:

    мы только что рассмотрели общие темы, с которыми мы можем столкнуться при работе со сложным SQL.Однако бывают случаи, когда мы можем столкнуться с ошибками, которые очень специфичны для запроса, с которым мы работаем. Вот несколько основных ошибок, с которыми мы можем столкнуться, мы используем MySQL здесь в качестве примера, сообщения об ошибках от других диалектов SQL могут быть очень похожими:


    Ошибка 1: 

    Синтаксическая ошибка SQL: в базе данных MySQL обнаружена ошибка. при выполнении этого запроса.

    (conn=95374054) Неизвестный столбец «users.city» в «списке полей»

    Так что же означает эта ошибка?

    База данных выдает ошибку о том, что столбец, на который мы ссылаемся в параметре `sql` поля, не найден.Поэтому здесь мы можем проверить несколько вещей:

    Действия по устранению неполадок:

    • Сузить поля, из которых исходит ошибка, и определить таблицу в базе данных, из которой исходит ошибка.

    • Запустите `SELECT  * FROM [TABLE_NAME] LIMIT 5;`, чтобы просмотреть список столбцов в таблице. Проверьте, существует ли рассматриваемый столбец в вашей таблице.

    Частые причины этой ошибки:

     

    Ошибка 2:

    Синтаксическая ошибка SQL: (conn=95369153) FUNCTION demo_db.getdate не существует


    Объяснение: Эта ошибка связана с использованием неправильной функции. Как мы видим здесь в SQL, функция `getdate()` не является распознаваемой функцией в базе данных MySQL. Правильная функция для использования в этом случае будет curdate()


    `sql: curdate() ;;`

    Поскольку существуют нюансы, в которых диалект SQL основан на вашей базе данных, рекомендуется дважды проверить функции и их свойства при написании пользовательского SQL!

     

    Ошибка 3:
    Ошибка SQL: «X не является допустимой группой по выражению»

    Объяснение : Что означает ошибка? Вполне вероятно, что поля, которые мы добавляем в наш запрос, не агрегируются (измеряются) по группе (измерению)

    Мы хотели бы создать показатель для поля, которое мы используем:

    Вместо того, чтобы выполнять суммирование функция в SQL измерения — вместо этого мы хотели бы создать меру суммы типов


    Ошибка 4:
    invalidQuery: нет соответствующей подписи для оператора >= для типов аргументов: TIMESTAMP, DATE.Поддерживаемая подпись: ЛЮБОЙ >= ЛЮБОЙ в [34:11]

    • Здесь мы хотим убедиться, что две сравниваемые функции даты имеют один и тот же ТИП ДАННЫХ (метка времени >= метка времени или дата >= дата или дата/время > = datetime) 

    • Часто мы можем использовать cast() для приведения одного из полей к типу данных других полей

    • Часто полезно взглянуть на запрос, чтобы увидеть, какие поля имеют тип date или поле времени, из которого может возникнуть ошибка, и работающее оттуда

    • Аналогичная ошибка может произойти, когда мы пишем «случай, когда .. Тогда заявление, если тип данных для всех «Тогда» утверждения не согласованы


    более распространенные ошибки SQL Устранение неисправностей:

    Как избежать деления на ноль 9064

    с неуникальными первичными ключами

    Ошибка: столбец <имя> должен присутствовать в предложении GROUP BY или использоваться в агрегатной функции

    Ошибка SQL: «Синтаксическая ошибка в или около:»

    Ошибка SQL: отношение «схема.

    Добавить комментарий

    Ваш адрес email не будет опубликован.