Я делаю внешнее соединение и успешно выполняюсь в базе informix
, но в своем коде получаю следующее исключение:
DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat);
Не удалось включить ограничения. Одна или несколько строк содержат значения нарушая непустые, уникальные или внешние ключи.
Я знаю проблему, но я не знаю, как ее исправить.
Вторая таблица, в которой выполняется внешнее соединение, содержит составной первичный ключ, который является нулевым в предыдущем внешнем запросе соединения.
EDIT:
SELECT UNIQUE a.crs_e, a.crs_e || '/ ' || a.crst crs_name, b.period,
b.crscls, c.crsday, c.from_lect, c.to_lect,
c.to_lect - c.from_lect + 1 Subtraction, c.lect_kind, e.eval, e.batch_no,
e.crsnum, e.lect_code, e.prof_course
FROM rlm1course a, rfc14crsgrp b, ckj1table c, mnltablelectev d,
OUTER(cc1assiscrseval e)
WHERE a.crsnum = b.crsnum
AND b.crsnum = c.crsnum
AND b.crscls = c.crscls
AND b.batch_no = c.batch_no
AND c.serial_key = d.serial_key
AND c.crsnum = e.crsnum
AND c.batch_no = e.batch_no
AND d.lect_code= e.lect_code
AND d.lect_code = ....
AND b.batch_no = ....
Проблема возникает с таблицей cc1assiscrseval
. Первичным ключом является (batch_no, crsnum, lect_code).
Как решить эту проблему?
EDIT:
В соответствии с рекомендацией @PaulStock
:
Я делаю то, что он сказал, и я получаю:
? dt.GetErrors() [0] {System.Data.DataRow} HasErrors: true ItemArray: {object [10]} RowError: "Колонка" eval "не позволяет DBNull.Value."
Итак, я решу свою проблему, заменяя e.eval
на, NVL (e.eval,'') eval
., и это решает мою проблему.
Большое спасибо.