MS-Access: TableAdapter UpdateCommand для таблицы без первичного ключа - PullRequest
1 голос
/ 15 марта 2010

Каков синтаксис запроса на обновление таблицы без первичного ключа?

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

Примечание: База данных - Microsoft Access.

Примечание: Аналогично: Excel: обновление TableAdapterCommand для таблицы без первичного ключа

ОБНОВЛЕНИЕ: Правильно ли я говорю: «Если таблица в базе данных не имеет явного первичного ключа, то не может быть действительного TableAdapter UpdateCommand?»

Ответы [ 3 ]

3 голосов
/ 15 марта 2010

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

2 голосов
/ 15 марта 2010

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

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

update TableA
set Column1 = @Column1, Column2 = @Column2 ...
where Column1 = @PreviousColumn1 and Column2 = @PreviousColumn2 ...

EDIT
Вы не сможете использовать мастер для обновления или удаления команд без PK на столе. Однако вы можете сделать копию файла Access, поместить в таблицу PK (если вы не можете получить короткий неявный ключ, вам, возможно, придется использовать каждый столбец) и использовать его для создания команд с помощью мастера.

Если вы не хотите проходить этот шаг, вам придется создать запрос, аналогичный приведенному выше. Для параметров @PreviousColumnX их значения SourceVersion будут установлены на Original.

update TableA
set Column1 = @Column1, Column2 = @Column2 ...
where (Column1 = @PreviousColumn1 or @PreviousColumn1 is null)
    and Column2 = @PreviousColumn2 ...
0 голосов
/ 15 марта 2010

Какую СУБД вы используете? В Oracle (и, возможно, в других, но у меня больше опыта работы с Oracle), существует псевдостолбец ROWID, который можно использовать в качестве уникального идентификатора строки, даже если первичного ключа нет

...