SQL INSERT存储过程无法正常工作

Ser*_*pia 2 sql sql-server

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
    )
Run Code Online (Sandbox Code Playgroud)

该错误是因为表anuncio还有1个属性:"idAnuncio".它是主键,它是身份(自动增量).

所以,我怎么能处理这个缺失的东西是一个身份.我不想从我的前端传递该参数.

mar*_*c_s 9

您需要在insert语句中指定明确的列列表:

INSERT INTO 
   Anuncio(Titulo, Precio, Descripcion, IDCategoria, IDImagen, Login)
VALUES
   (@Titulo, @Precio, @Descripcion, @IDCategoria, @IDImagen,  @Login)
Run Code Online (Sandbox Code Playgroud)

否则,SQL Server将尝试为此处失败的所有列插入值.它无法在IDENTITY列中插入值 - SQL Server会在插入新行时自动设置该列,并保证该列唯一.

ID字段是"INT IDENTITY"类型吗?在这种情况下,您可以像这样访问新插入的ID的值:

 DECLARE @NewID INT
 SET @NewID = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)

并可能从存储过程中返回它:

 RETURN @NewID
Run Code Online (Sandbox Code Playgroud)


Zed*_*Zed 8

您需要指定哪个值到哪个字段.

INSERT INTO Anuncio (field1, field2, ...) VALUES (@Titulo, ...)
Run Code Online (Sandbox Code Playgroud)