Ошибка SQL при вставке журнала аудита после Scope_Identity () - PullRequest
0 голосов
/ 03 сентября 2010

Я пытаюсь использовать хранимую процедуру, чтобы вставить в основную таблицу, а затем вставить эти данные в таблицу исторических данных. Я не хочу использовать триггер, а просто делаю простую вставку всех столбцов в таблицу истории. Я получаю эту ошибку, однако.

"Явное значение для столбца идентификаторов в таблице 'ipaudittrail' можно указывать, только если используется список столбцов и включен IDENTITY_INSERT."

Я полагаю, это связано с Scope_Identity ()? но я не очень разбираюсь в SQL, поэтому я не уверен, что это лучший способ решить эту проблему. Любые предложения приветствуются. Спасибо!

Insert Input
  (OpenedByName, Owner, Description, WorkOfDate)
Values 
  (@vOpenedByFirstName, @vOwner, @vDescription, @vWorkOfDate)

Set @vRecID = Scope_Identity()

Insert InputAuditTrail 
Select * 
  From Input 
 Where RecID = @vRecID

Select * 
  From Input     
 Where i.RecID = @vRecID

Ответы [ 2 ]

4 голосов
/ 03 сентября 2010

В вашей таблице контрольного журнала не должно быть установлено свойство identity в столбце RecID, поскольку вы не хотите, чтобы оно автоматически увеличивалось независимо. Вам необходимо изменить определение таблицы, чтобы отразить это.

Сделав это, вы можете использовать для этого предложение OUTPUT .

Insert Input(OpenedByName,Owner,Description,WorkOfDate)
OUTPUT inserted.* INTO InputAuditTrail /*Inserts to Audit Table*/
OUTPUT inserted.* /*Returns to Client*/
Values (@vOpenedByFirstName,@vOwner,@vDescription,@vWorkOfDate)
1 голос
/ 03 сентября 2010
Insert InputAuditTrail Select * From Input Where RecID = @vRecID

Это возвращает количество столбцов, и один из них пытается записать в столбец идентификатора InputAuditTrail.

Заменить оператор на

Insert InputAuditTrail(col1, col2, ./...) Select cola, colb, .... From Input Where RecID = @vRecID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...