2009-04-21 10 views
5

У меня возникли проблемы с запуском инструкции INSERT, где есть номер автонабора, как поле PK. У меня есть Auto-incrementing long в качестве Первичного ключа, а затем 4 поля типа double; и, тем не менее, доступ (с использованием ADO), по-видимому, требует пяти значений для инструкции insert.Использование операторов Autonumbering in Access - INSERT

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!! 

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

ответ

13

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

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

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

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

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

SELECT @@identity FROM MyTable 

заявления.

+0

Спасибо так много! Вы не только ответили на мой вопрос, но вы ответили на следующий вопрос, который я писал в процессе написания: как извлечь номер автозапуска после вставки. Ура! – Smashery

1

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

0

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

0

Просто оставьте номер авто из запроса на ввод. Он будет заполняться по своему усмотрению.

Существует поле ID перед 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

Непонятный ответ, возможно, попробуйте более конкретно узнать, что другой человек спросил, а не использовать код, который у вас есть. – Migol