Использование автоматической нумерации в операторах Access-INSERT

у меня проблемы с управлением INSERT оператор, где есть autonumber как поле PK. У меня есть автоматическое приращение long в качестве первичного ключа, а затем 4 поля типа double; и все же Access (используя ADO), похоже, хочет пять значений для оператора 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!!

как использовать Автонумерации на самом деле счетчик?

4 ответов


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

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

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

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

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

SELECT @@identity FROM MyTable

заявление.


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


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


просто оставьте номер авто из запроса Insert. Он заполняет самостоятельно.

перед 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;