Хранимая процедура IDENTITY_INSERT - PullRequest
0 голосов
/ 23 июня 2011

Я недавно изменил свою таблицу данных, я удаляю столбец и добавляю новый столбец, который определяет как идентичность = Истина и идентификатор семени = 1, приращение идентичности = 1. Когда я попытался вставить данные в эту таблицу с помощью ПРОЦЕДУРЫ ХРАНЕНИЯ, яполучить это исключение:

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

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

Моя процедура хранения прикреплена как рисунок enter image description here

Ответы [ 4 ]

4 голосов
/ 23 июня 2011

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

0 голосов
/ 23 июня 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.Посмотрите их в Книгах онлайн, чтобы узнать, как их использовать.

0 голосов
/ 23 июня 2011

можно указывать только при использовании списка столбцов и включении IDENTITY_INSERT.

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

INSERT INTO AirConditioner (ID, CategoricNumber, ...)
VALUES(@ID, @CategoricNumber, ...)
0 голосов
/ 23 июня 2011

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

SET IDENTITY_INSERT [dbo].[AirConditioner] ON
GO

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

...