L'instruction SQL ne met pas à jour les lignes

EDIT: Ok, je l'ai compris, j'ai une instruction if qui doit returnner true pour que le SQL s'exécute, c'est le problème. Rien ne clochait avec mon SQL. Pardon!

Je ne sais pas quel est le problème avec cette déclaration, mais il ne mettra à jour aucune ligne.

IF EXISTS ( SELECT * FROM dtRaces WHERE Date = @date AND Location = @location AND Time = @time ) UPDATE dtRaces SET Date=@date, Location=@location, Time=@time City=@city, State=@state, Title=@title WHERE Date = @date AND Location = @location AND Time = @time ELSE INSERT INTO dtRaces (Date, Location, Time, City, State, Title) VALUES (@date, @location, @time, @city, @state, @title) 

Des idées? Je suis perplexe. C'est avec SQL Server 2008, mais je n'ai pas encore appris à utiliser MERGE.

Vous avez la déclaration:

  UPDATE dtRaces SET Date=@date, Location=@location, Time=@time WHERE Date = @date AND Location = @location AND Time = @time 

Ceci met à jour les colonnes pour avoir des valeurs, mais seulement là où elles ont déjà ces valeurs – vous n'en verrez jamais de données mises à jour.

Je vous suggère de comparer les valeurs.

Commencer avec

 IF EXISTS (SELECT * FROM dtRaces WHERE Date = @date AND Location = @location AND Time = @time) begin print('exists') end else begin print('insert') end 

Vous pouvez modifier les instructions d'printing pour sélectionner les informations et les comparer.

 UPDATE dtRaces SET Date=@date, Location=@location, Time=@time WHERE Date = @date AND Location = @location AND Time = @time 

Vous essayez de mettre à jour les valeurs avec @date, @location, @time et vous essayez de find les loggings avec date=@date,location=@location,time=@time .

Ok je l'ai compris, j'ai une instruction if qui doit returnner true pour que le SQL s'exécute, c'est le problème. Rien ne clochait avec mon SQL. Pardon!

Vous mettez à jour la ligne aux mêmes valeurs si la ligne existe. Donc – on dirait que rien ne s'est passé.

Mais si vous créez un sortinggger après une mise à jour, vous verrez définitivement qu'il fonctionne

PS: Le comportement global est un peu étrange.

Modifier:

Maintenant, cela semble mieux, mais vous n'avez toujours pas besoin de mettre à jour certaines valeurs avec les mêmes valeurs, voir ceci:

 IF EXISTS ( SELECT * FROM dtRaces WHERE Date = @date AND Location = @location AND Time = @time ) UPDATE dtRaces SET City=@city, State=@state, Title=@title WHERE Date = @date AND Location = @location AND Time = @time ELSE INSERT INTO dtRaces (Date, Location, Time, City, State, Title) VALUES (@date, @location, @time, @city, @state, @title) 

Pour utiliser MERGE, vous devez garantir que ces trois colonnes seront toujours uniques: Date, Heure, Lieu. Si oui, le MERGE ressemblera à ceci:

 MERGE dtRaces T USING (SELECT 1 S) S ON T.Date = @date AND T.Location = @location AND Time = @time WHEN MATCHED THEN UPDATE SET City=@city, State=@state, Title=@title WHEN NOT MATCHED THEN INSERT (Date, Location, Time, City, State, Title) VALUES (@date, @location, @time, @city, @state, @title); 

PS: Si l'une de vos variables (@Date, @Time, @Location) a la valeur NULL – vous ne recevrez jamais de mise à jour.