Хранимая процедура IDENTITY_INSERT
Я недавно изменил свою таблицу данных, я удаляю столбец и добавляю новый столбец, который определяет как идентичность = Истина и идентификатор семени = 1, приращение идентичности = 1. Когда я попытался вставить данные в эту таблицу с помощью ПРОЦЕДУРЫ ХРАНЕНИЯ, я получил это исключение:
Явное значение для столбца идентификаторов в таблице "AirConditioner" можно указывать только в том случае, если используется список столбцов, а IDENTITY_INSERT включен.
Я увидел, что мне нужно добавить следующие строки: SET IDENTITY_INSERT [dbo].[AirConditioner] ON и, наконец, OFF. Я добавил, и он все еще выдает исключение...
Моя процедура магазина прикреплена как изображение
4 ответа
SQL Server позаботится о присвоении значения вашему столбцу идентификации. Вы должны удалить @ID
из оператора вставки и удалите IDENTITY_INSERT
заявления.
можно указывать только в том случае, если используется список столбцов, а IDENTITY_INSERT включен.
Вы забываете первое условие: список столбцов. Список столбцов является (обычно) необязательным элементом между именем таблицы и values
, Вы должны указать это как:
INSERT INTO AirConditioner (ID, CategoricNumber, ...)
VALUES(@ID, @CategoricNumber, ...)
НЕ используйте установленную идентификационную вставку на. Если у вас есть удостоверение, вы должны позволить 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. Посмотрите их в Книгах онлайн, чтобы узнать, как их использовать.
Попробуйте разместить
SET IDENTITY_INSERT [dbo].[AirConditioner] ON
GO
Перед изменением процедуры