2010-03-02 3 views
8

J'ai un tables Voitures et CarDescriptionsInsertion ou mise à jour si l'enregistrement est dans le tableau

voitures: IDCar (int, PK, autoincrement) carsDesciptions (IDDescription, tête (nvarchar), contenu (nvarchar), . idCar (int, FK)

En application j'ajoute les voitures et l'édition de ceux qui existent déjà

Mes problèmes:

1.Comment enregistrer la voiture modifiée avec des descriptions dans la base de données ??

je ID de voiture, et je les ID des descriptions

Classe CarDescirption n'a pas de piscine comme IsChanged, si

Je ne veux pas faire quelque chose comme:

  1. supprimer de carsdescriptions où idcar = @ idcar
  2. insert dans cardescriptions (, @ tête, Content @, @ IDCar)

le dossier doit être mis à jour si est dans le tableau, et inséré si n'existe pas dans le tableau

+0

Quelle base de données utilisez-vous? –

+0

Microsoft SQL Server 2005 – user278618

Répondre

12

Il a le meilleur perfomacne:

UPDATE Table1 SET (...) WHERE Column1='SomeValue' 
IF @@ROWCOUNT=0 
    INSERT INTO Table1 VALUES (...) 
5

probablement quelque chose de similaire avec quelques modifications travaillerait

IF EXISTS (SELECt * FORM carsdescriptions WHERE IDCar = @IDCar) 
     UPDATE carsdescriptions 
     SET Header = @Header, Content = @Content 
     WHERE IDCar = @IDCar 
    ELSE 
     INSERT INTO carsdescriptions (IDCar, Header, Content) 
     VALUES (@IDCar, @Header, @Content) 

Jetez un oeil à cet article ainsi, vous donnera un aperçu plus

+0

Je sais mettre à jour :) – user278618

0

Vous aurez envie de faire un SI EXISTE d'abord pour voir si l'enregistrement existe dans la table. Si ce n'est pas le cas, INSÉRER la nouvelle voiture, sinon METTRE à JOUR l'enregistrement existant.

7

En SqlServer 2008 il y a an UPSERT command qui fait exactement cela. Je n'ai pas essayé.