Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Приложение 2. Некоторые типичные ошибки SQL




При отладке программ неизбежно обнаруживаются разнообразные ошибки. Рассмотрим некоторые типичные ситуации при работе в SQL Management Studio.

 

Команда:

SELCT * FROM k_bill

Ошибка:

Msg 102, Level 15, State 1, Line 1

Неправильный синтаксис около конструкции "*".

Объяснение:

Синтаксическая ошибка, пропущена буква в слове SELECT.

Команда:

INSERT INTO k_firm (firm_name, firm_addr)

VALUES(10, 'Сигма', 'Киев');

Ошибка:

Msg 110, Level 15, State 1, Line 1

Число столбцов в инструкции INSERT меньше числа значений, указанных в предложении VALUES. Число значений в предложении VALUES должно соответствовать числу столбцов, указанному в инструкции INSERT.

Объяснение:

В команде вставки в списке полей перечислены два поля, а в списке значений – три значения.

 

Команда:

INSERT INTO k_firm (firm_num, firm_name, firm_addr)

VALUES(10, 'Сигма', 'Киев');

Ошибка:

Msg 544, Level 16, State 1, Line 1

Невозможно вставить явное значение для столбца идентификаторов в таблице "k_firm", когда параметр IDENTITY_INSERT имеет значение OFF.

Объяснение:

По умолчанию нельзя указывать явное значение для поля, у которого установлено свойство IDENTITY, т.е., для поля firm_num. Если требуется явно указывать значения для таких полей, следует предварительно выполнить команду:

SET IDENTITY_INSERT ON

 

Команда:

INSERT INTO k_staff

(staff_name, dept_num, staff_hiredate, staff_post)

VALUES('Смит', 4, GETDATE(), 'Менеджер');

Ошибка:

Msg 547, Level 16, State 0, Line 1

Конфликт инструкции INSERT с ограничением FOREIGN KEY "fk_staff_dept_num". Конфликт произошел в базе данных "kontora", таблица "dbo.k_dept", column 'dept_num'.

Выполнение данной инструкции было прервано.

Объяснение:

Нарушено ограничение внешнего ключа: мы пытаемся вставить ссылку на несуществующий отдел с номером 4.

 

Команда:

DELETE FROM k_contract WHERE contract_num=1

Ошибка:

Msg 547, Level 16, State 0, Line 1

Конфликт инструкции DELETE с ограничением REFERENCE "fk_bill_contract_num". Конфликт произошел в базе данных "kontora", таблица "dbo.k_bill", column 'contract_num'.

Выполнение данной инструкции было прервано.

Объяснение:

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

 

Команда:

SELECT * FROM k_contract

WHERE contract_date BETWEEN '01/03/2012' AND '31/03/2012'

Ошибка:

Msg 242, Level 16, State 3, Line 1

Преобразование типа данных char в тип данных datetime привело к значению datetime за пределами диапазона.

Объяснение:

Видимо, на компьютере установлен другой формат даты.

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

SET DATEFORMAT dmy

 

Команда:

SELECT price_name, MIN(price_sum) FROM k_price

Ошибка:

Msg 8120, Level 16, State 1, Line 1

Столбец "k_price.price_name" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Объяснение:

Если используются агрегирующие функции без группировки, в списке полей могут присутствовать только агрегирующие функции.

 

Команда:

SELECT contract_num, contract_date, bill_num, bill_date

FROM k_bill, k_contract

WHERE k_bill.contract_num=k_contract.contract_num

Ошибка:

Msg 209, Level 16, State 1, Line 1

Неоднозначное имя столбца "contract_num".

Объяснение:

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

 

Команда:

SELECT contract_num, contract_date FROM k_contract

WHERE contract_num =

(SELECT contract_num FROM k_bill

WHERE bill_date

BETWEEN '01/01/2012' AND '12/31/2012'

AND k_contract.contract_num=k_bill.contract_num)

Ошибка:

Msg 512, Level 16, State 1, Line 1

Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =,!=, <, <=, >, >= или используется в качестве выражения.

Объяснение:

Нельзя использовать обычные операции сравнения с подзапросом, если подзапрос возвращает несколько строк. Следует использовать ключевые слова ALL или ANY.

 

Команда:

INSERT INTO k_dept (dept_short_name, dept_full_name)

VALUES('Служба безопасности', 'Отдел №1');

Ошибка:

Msg 8152, Level 16, State 14, Line 1

Символьные или двоичные данные могут быть усечены.

Выполнение данной инструкции было прервано.

Объяснение:

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


Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...