Вам необходимо указать явный список столбцов в операторе вставки:
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
Марк