编辑:好的,我想通了,我有一个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。
答案 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没有错。遗憾!