Измените все первичные ключи в таблице доступа на новые номера - PullRequest
1 голос
/ 18 декабря 2009

У меня есть таблица доступа с автоматическим первичным ключом, датой и другими данными. Первая запись начинается с 36, из-за удаленных записей. Я хочу изменить все первичные ключи, чтобы они начинались с 1 и увеличивались, упорядоченные по дате. Какой лучший способ сделать это?

Я хочу изменить таблицу из этого:

| TestID | Date     | Data |
|  36    | 12/02/09 | .54  |
|  37    | 12/04/09 | .52  |

К этому:

| TestID | Date     | Data |
|  1     | 12/02/09 | .54  |
|  2     | 12/04/09 | .52  |

РЕДАКТИРОВАТЬ: Спасибо за вклад и тех, кто ответил. Я думаю, что некоторые читали слишком много в моем вопросе, и это нормально, потому что это все еще добавляет мне процесс обучения и мышления. Цель моего вопроса была двоякой: 1) было бы лучше, если бы me было бы лучше сопоставить PK с порядком дат моих данных и 2) узнать, возможно ли что-то подобное для последующего использования , Например, если я хочу добавить в таблицу новый столбец, который нумерует тесты, обозначает тип теста и т. Д. Я сейчас пытаюсь многому научиться сразу, поэтому я немного запутался, с чего начать. Я создаю приложения .NET и пытаюсь изучить SQL и управление базами данных, и иногда мне сложно найти нужную информацию с помощью различных RDMS и способов взаимодействия с ними.

Ответы [ 4 ]

3 голосов
/ 18 декабря 2009

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

INSERT 
    TestID, Date, Data
INTO
    NewTable
SELECT
    TestID, Date, Data
FROM
    OldTable;

Новый TestID будет начинаться с 1, если вы используете поле AutoIncrement.

3 голосов
/ 18 декабря 2009

Я бы создал новую таблицу с автоинкрементом.

Затем выберите все существующие данные в нем, упорядочивая по дате. Это приведет к воссозданию идентификаторов из "1".

Тогда вы можете удалить исходную таблицу и переименовать новую.

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

2 голосов
/ 18 декабря 2009

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

0 голосов
/ 18 декабря 2009

Я согласен, что значение автоматически сгенерированных значений IDENTITY не должно иметь никакого значения, даже для кодера, но для образовательных целей, вот как повторно заполнить IDENTITY с помощью ADO:

ACC2000: невозможно изменить начальное значение по умолчанию и значение приращения в пользовательском интерфейсе

Обратите внимание, что статья устарела, поскольку в ней говорится: «В пользовательском интерфейсе (UI) нет параметров, позволяющих вам внести это изменение». В более поздней версии Access, DLL-библиотека SQL могла бы выполняться, когда в ANSI-92 Query Mode например. как то так:

ALTER TABLE MyTable ALTER TestID INTEGER IDENTITY (1, 1) NOT NULL;

...