2009-08-28 9 views
1
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 
    ) 

L'erreur est que l'anuncio de la table a 1 autre attribut: "idAnuncio". C'est la clé primaire, et c'est l'indentité (autoincrement). Donc, comment puis-je gérer ceci est la chose manquante est une identité. Je ne veux pas passer ce paramètre de mon front-end.La procédure stockée SQL INSERT ne fonctionne pas

+0

Quelle erreur obtenez-vous? – RiddlerDev

+0

3ème fois avec la mauvaise étiquette. TTT ... TTT. Ce n'est vraiment pas si difficile de taper 'sql-server'. –

Répondre

8

Vous devez spécifier la liste explicite des colonnes dans votre déclaration d'insertion:

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

Sinon, SQL Server va essayer d'insérer des valeurs pour toutes les colonnes qui échoue ici. Il ne peut pas insérer une valeur dans une colonne IDENTITY - cette colonne sera définie automatiquement par SQL Server lors de l'insertion d'une nouvelle ligne et est garantie d'être unique.

Le champ ID de type "INT IDENTITY"? Dans ce cas, vous pouvez accéder à la valeur de l'ID nouvellement insérée comme ceci:

DECLARE @NewID INT 
SET @NewID = SCOPE_IDENTITY() 

et peut-être retourner dans le proc stocké:

RETURN @NewID 

Marc

+0

+1 pour l'exemple d'insertion complète utilisant le code OP – apiguy

+0

Pas vraiment répondu à ma question. Je souhaite insérer un nouvel enregistrement, mais IdAnuncio est une IDENTITY qui s'auto-incrémente chaque fois qu'il y a un nouvel enregistrement. Comment puis-je créer une procédure stockée en tenant compte de cela? –

+0

Ok, j'ai modifié mon code en utilisant votre exemple ci-dessus, et la procédure a été exécutée correctement (je l'ai créée), donc je suppose que mon PrimaryKey (type d'identité) sera auto-incrémenté. –

8

Vous devez spécifier quelle valeur va dans quel champ.

INSERT INTO Anuncio (field1, field2, ...) VALUES (@Titulo, ...) 
Questions connexes