Хранимая процедура IDENTITY_INSERT

Недавно я изменил свою таблицу данных, я удаляю столбец и добавляю новый столбец, который определяется как identity = True и identity seed = 1, приращение идентификатора = 1. Когда я пытался вставить данные в эту таблицу с помощью STORE PROCEDURE, я получаю это исключение :

Явное значение для столбца идентификаторов в таблице «AirConditioner» можно указать только тогда, когда используется список столбцов и для IDENTITY_INSERT установлено значение ON.

Я видел, что мне нужно добавить эти строки: SET IDENTITY_INSERT [dbo]. [AirConditioner] ON и, наконец, OFF Я добавил, и он все еще вызывает исключение ...

Моя процедура магазина прикреплена в виде изображения введите описание изображения здесь


person Jacob    schedule 23.06.2011    source источник


Ответы (4)


SQL Server позаботится о присвоении значения вашему столбцу идентификации. Вы должны удалить @ID из оператора вставки и удалить операторы IDENTITY_INSERT.

person Mikael Eriksson    schedule 23.06.2011

может быть указан только тогда, когда используется список столбцов и IDENTITY_INSERT установлен в ON.

Вы забываете первое условие: список столбцов. Список столбцов - это (обычно) необязательный элемент между именем таблицы и values. Вы должны указать это так:

INSERT INTO AirConditioner (ID, CategoricNumber, ...)
VALUES(@ID, @CategoricNumber, ...)
person Andomar    schedule 23.06.2011

НЕ используйте вставку идентификатора. Если у вас есть личность, вы должны позволить SQL-серверу решать, какое значение в нее поместить.

ALTER PROCEDURE [dbo].[AddAirConditioner] @CategoricNumber int, @Name nvarchar(50),
@PicName nvarchar(100), @ShortDetails nvarchar(200), @Details nvarchar(2000), 
@Price int, @ImagePath nvarchar(500), @AirConditionerType nvarchar(50), @COP float, 
@BTU float, @ProdType nvarchar(20), @ProdIndex int 
AS   

INSERT INTO AirConditioner VALUES( @CategoricNumber, @Name, @PicName, 
@ShortDetails, @Details, @Price, @ImagePath, @AirConditionerType, @COP,
@BTU, @ProdType, @ProdIndex) 

Если вам нужно вернуть идентификатор для использования в дочерних таблицах, используйте scope_identity или предложение output. Поищите их в Книгах в Интернете, чтобы узнать, как ими пользоваться.

person HLGEM    schedule 23.06.2011

Попробуйте разместить

SET IDENTITY_INSERT [dbo].[AirConditioner] ON
GO

Перед процедурой изменения

person JConstantine    schedule 23.06.2011