Как добавить отсутствующий первичный ключ в datatable (oracle db)
У нас есть две таблицы (формула и элемент), обе таблицы содержат первичный ключ (формула = Formula_Id и элемент = item_code).
присоединился к таблице, чтобы получить результат от обеих таблиц.
Мы используем отключенный подход для извлечения данных из oracle в Dotnet datable.
Код прекрасно работает с базой данных sqlserver. он добавляет столбец formula_id в качестве первичного ключа.
(чего мы и хотим)
Когда мы выполняем его против oracle. Первичный ключ объекта DataTable длина становится равной нулю, означает отсутствие первичных ключевых столбцов в объект DataTable.
Логика кода одинакова, и оператор select также одинаков, нет никакой разницы, но для sql server это добавление первичного ключа.
OracleDataAdapter добавляет столбцы первичного ключа, если в инструкции select используется только одна таблица.
Если мы присоединяемся к таблице или добавляем запрос внутри запроса, то он не добавляет никакого парного ключевого столбца в datatable.
Что я уже пробовал:
Если я задам столбцу PRIMARY_IND значение по умолчанию “0”, то он добавит столбец FORMULA_ID в качестве первичного ключа в таблицу данных.
SELECT FORMULA_ID, FORMULA_CODE, VERSION, DESCRIPTION, UOM_CODE, YIELD, YIELD_PCT, DOC_ID, TYPE_IND, PROCESS_YIELD, OWNER_CODE, OWNER_SECURITY, GROUP_CODE, GROUP_SECURITY , ROLE_SECURITY, STATUS_IND, FORMULATOR_CODE, YIELDCALC_IND, CLASS, LOGICAL_DELETE, ADJUST_PARAM,ROLLUP_ID,CALC_MODE, ITEM_CODE, 0 AS PRIMARY_IND FROM FORMULA F WHERE FORMULA_CODE = [%1] AND VERSION=[%2]'
Если я задам выражение, как показано ниже, то оно добавит столбец ITEM_CODE в качестве первичного ключа в таблицу данных.
SELECT FORMULA_ID, FORMULA_CODE, VERSION, DESCRIPTION, UOM_CODE, YIELD, YIELD_PCT, DOC_ID, TYPE_IND, PROCESS_YIELD, OWNER_CODE, OWNER_SECURITY, GROUP_CODE, GROUP_SECURITY , ROLE_SECURITY, STATUS_IND, FORMULATOR_CODE, YIELDCALC_IND, CLASS, LOGICAL_DELETE, ADJUST_PARAM,ROLLUP_ID,CALC_MODE,(SELECT COUNT(*) FROM ITEM I WHERE I.ITEM_CODE = F.ITEM_CODE AND I.FORMULA_ID = F.FORMULA_ID) AS PRIMARY_IND ITEM_CODE FROM FORMULA F WHERE FORMULA_CODE = [%1] AND VERSION=[%2]
оба запроса работают нормально и добавляют столбцы formula_id в качестве первичного ключа в datatable, если мы выполняем их против sql-сервера.
Это не работает для oracle.