SQL INSERT хранимая процедура не работает - PullRequest
1 голос
/ 28 августа 2009
Create Proc CrearNuevoAnuncio
    @Titulo varchar(250),
    @Precio int,
    @Descripcion varchar(250),
    @IDCategoria int,
    @IDImagen int,  
    @Login varchar(200)

AS

INSERT INTO Anuncio VALUES(
    @Titulo,
    @Precio,
    @Descripcion,
    @IDCategoria,
    @IDImagen,  
    @Login
    )

Ошибка в том, что таблица anuncio имеет еще 1 атрибут: "idAnuncio". Это первичный ключ, и это идентичность (автоинкремент).

Итак, как я могу справиться с этим, пропавшая вещь - это Идентичность. Я не хочу передавать этот параметр из моего интерфейса.

Ответы [ 2 ]

8 голосов
/ 28 августа 2009

Вам необходимо указать явный список столбцов в операторе вставки:

INSERT INTO 
   Anuncio(Titulo, Precio, Descripcion, IDCategoria, IDImagen, Login)
VALUES
   (@Titulo, @Precio, @Descripcion, @IDCategoria, @IDImagen,  @Login)

В противном случае SQL Server попытается вставить значения для ВСЕХ столбцов, которые здесь не выполняются. Он не может вставить значение в столбец IDENTITY - этот столбец будет автоматически установлен SQL Server при вставке новой строки и гарантированно будет уникальным.

Является ли поле идентификатора типа "INT IDENTITY"? В этом случае вы можете получить доступ к значению вновь вставленного идентификатора, например так:

 DECLARE @NewID INT
 SET @NewID = SCOPE_IDENTITY()

и, возможно, вернуть его из сохраненного процесса:

 RETURN @NewID

Марк

8 голосов
/ 28 августа 2009

Вам необходимо указать, какое значение в каком поле идет.

INSERT INTO Anuncio (field1, field2, ...) VALUES (@Titulo, ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...