SQL语句不会更新任何行

时间:2012-02-24 11:16:54

标签: .net sql-server

编辑:好的,我想通了,我有一个if语句必须返回true才能运行SQL,这就是问题所在。我的SQL没有错。遗憾!

我不知道这句话有什么问题,但它不会更新任何一行。

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)

有什么想法吗?我很难过。 这是SQL Server 2008,但我还没有学会如何使用MERGE。

5 个答案:

答案 0 :(得分:3)

你有声明:

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

这是更新列以获取值,但只有在已经拥有这些值的位置 - 您才会看到更新的数据。

答案 1 :(得分:1)

我建议你比较这些值。

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

您可以更改print语句以选择信息并进行比较。

答案 2 :(得分:0)

如果行存在,您正在将行更新为相同值。所以 - 看起来像什么也没发生。

如果您在更新后创建触发器 - 您肯定会看到它运行

PS:整体行为有点奇怪。

修改

现在它看起来更好,但您仍然无需将某些值更新为相同的值,请参阅:

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)

对于使用MERGE ,您必须保证,这三列始终是唯一的:日期,时间,位置。如果是这样 - MERGE将如下所示:

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:如果你的一个变量(@ Date,@ Time,@ Location)的值为NULL - 你也永远不会得到更新。

答案 3 :(得分:0)

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

您正尝试使用@date, @location, @time更新值,并且您正尝试使用date=@date,location=@location,time=@time查找记录。

答案 4 :(得分:0)

好的我想通了,我有一个if语句必须返回true才能运行SQL,这就是问题所在。我的SQL没有错。遗憾!