Ассоциации в многозначной базе данных технически считаются другой таблицей при взаимодействии с SQL. Например, у вас есть файл счета-фактуры INV, с DICT, который выглядит следующим образом.
DICT INV 08:16:43 08-01-16 Page 1
Type &
Field......... Field. Field........ Conversion.. Column......... Output Depth &
Name.......... Number Definition... Code........ Heading........ Format Assoc..
@ID D 0 INV 10L S
CustNum D 1 5R S
PartNum D 2 8R M LineI
tem
Quantity D 3 5R M LineI
tem
4 records listed.
>
Вы не сможете использовать команду, которую вы пытаетесь обновить партномер, потому что вы не указываете, что @Id вы хотите, чтобы PARTNUMBER быть ассоциированным с. Например, вы не сказали бы ...
UPDATE INV SET PartNumber = 123456;
..because это не имеет смысла, и потерпит неудачу неявное ограничение внешнего ключа.
Кроме того, UPDATE может не быть командой, которую вы хотите использовать здесь, потому что, если у вас есть счет-фактура с @ID из 123 и вы хотите добавить PartNumber и количество к нему, вы хотели бы сделать что-то вроде этого.
INSERT INTO INV (@ID, PartNum, Quantity) VALUES (123, 123456, 2);
Отсюда можно было бы ожидать, что вы можете обновить Количество INV 123, PartNum 123456 от issueing команды ...
UPDATE INV SET Quantity = 7 WHERE @ID = 123 WHEN PartNum = 123456;
Но если бы вы попробовали, что Вселенная будет жаловаться, что там не является Ассоциацией, называемой LineItem.
Что касается UPDATES go, вам нужно, чтобы ваш DICT-файл был хорошо организован, чтобы заставить его работать должным образом. Я бы порекомендовал вам прочитать справочники SQL-справочника Universe (User, Ref и DBA). Вы можете найти их Here. Короче говоря, вам нужны записи PH в ваших DICT для каждой ассоциации MV, и вы, вероятно, захотите понять, является ли ваша связь STABLE, UNSTABLE (по умолчанию) или имеет KEY. Но это немного глубже для этого упражнения.
Я добавил запись PH к моему DICT для ассоциации LineItem.
DICT INV 08:38:16 08-01-16 Page 1
Type &
Field......... Field. Field........ Conversion.. Column......... Output Depth &
Name.......... Number Definition... Code........ Heading........ Format Assoc..
@ID D 0 INV 10R S
CustNum D 1 5R S
PartNum D 2 8R M LineI
tem
Quantity D 3 5R M LineI
tem
LineItem PH PartNum
Quantity
5 records listed.
И теперь это позволяет мне обновлять количество, как ожидалось.
>UPDATE INV SET Quantity = 7 WHERE @ID = 123 WHEN PartNum = 123456;
UniVerse/SQL: 1 record updated.
>SELECT @ID, PartNum, Quantity FROM INV WHERE @ID = 123;
INV....... PartNum. Quantity
123 123456 7
1 records listed.
>
Надеюсь, это поможет.