Использование автонумерации в Access - операторы INSERT - PullRequest
6 голосов
/ 21 апреля 2009

У меня проблемы с запуском оператора INSERT, в котором в качестве поля PK указан автономный номер. У меня есть Автоинкремент long в качестве первичного ключа, а затем 4 поля типа double; и все же Access (использующий ADO), кажется, хочет пять значений для оператора вставки.

INSERT INTO [MY_TABLE] VALUES (1.0, 2.0, 3.0, 4.0);
>> Error: Number of query values and destinations fields are not the same.

INSERT INTO [MY_TABLE] VALUE (1, 1.0, 2.0, 3.0, 4.0);
>> Success!!

Как использовать автонумерацию для фактического автонумерации?

Ответы [ 4 ]

15 голосов
/ 21 апреля 2009

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

Итак, что вам нужно сделать, это:

INSERT INTO MyTable ( Column2, Column3, Column4) VALUES ( 1, 2, 3 )

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

Затем вы можете получить значение первичного ключа для вновь вставленной записи, выполнив

SELECT @@identity FROM MyTable

заявление.

1 голос
/ 21 апреля 2009

Упомяните имена столбцов в запросе, поскольку вы предоставляете только 4 значения, тогда как в этой таблице 5 столбцов. База данных должна знать, какое значение вы предоставляете для какого столбца.

0 голосов
/ 14 февраля 2014

Просто оставьте автоматический номер вне запроса вставки. Это будет заполняться самостоятельно.

Перед ProjectID есть поле идентификатора

INSERT INTO ProjectRiskAssessment 
( ProjectID
, RiskClass
, RiskElement
, RiskAttribute
, RiskQuestion
, RiskScale
, RiskStatus
, RiskSeverity
, RiskProbability
, RiskResponse )
SELECT 
 1 AS Expr2
, PullRiskAssessmentQuestions.RiskClass
, PullRiskAssessmentQuestions.RiskElement
, PullRiskAssessmentQuestions.RiskAttribute
, PullRiskAssessmentQuestions.RiskQuestion
, '0' AS Expr3
, 'Open' AS Expr4
, '1' AS Expr5
, '1' AS Expr6
, ' ' AS Expr7
FROM PullRiskAssessmentQuestions;
0 голосов
/ 23 апреля 2009

Однако я понимаю, что если вы используете SQL Server или аналогичный и есть триггеры, которые добавляют дополнительные записи, @@ IDENTITY может быть аналогичным другим дополнительным записям.

...