爲什麼不會是有效的行? SQL Server不知道你想要做什麼。它認爲你想要更新其他表中某些條件存在的所有字段。 查看下面的最新更新。
SETUP
declare @table table
(
id int,
name varchar(10)
)
declare @itable table
(
id int,
name varchar(10)
)
insert into @table (id, name)
select 1,'abc' union
select 2,'def' union
select 3,'ghi' union
select 4,'jkl' union
select 5,'mno' union
select 6,'pqr'
insert into @itable (id, name)
select 1,'abc' union
select 2,'def' union
select 3,'ghi' union
select 4,'jkl' union
select 5,'mno' union
select 6,'pqr'
上@table所有名稱將變更爲ZZZ
update @table
set name = 'zzz'
from @itable i
where i.id = 1
select * from @itable
select * from @table
所有的名字其中id = 1的@table成爲YYY
update @table
set name = 'yyy'
from @itable i
inner join @table t on i.id = t.id
where i.id = 1
select * from @itable
select * from @table
這將不更新任何
update @table
set name = 'aaa'
from @itable i
where i.id = 133
select * from @itable
select * from @table
在哪裏只是一個布爾表達式。你也可以使用'WHERE 1 = 1'或'WHERE 1 = 0'。他們都是有效的 - 有沒有規則必須有一個有效的加入 –
這是記錄的地方?這看起來很奇怪,因爲從一個人看這個聲明看來,這似乎是無效的。它看起來像試圖更新一個甚至不是查詢的一部分的表(由於from子句)。 –
@ JennyO'Reilly他們顯然並不認爲值得爲每一個像你的同事這樣的人可以編程一些愚蠢的事情引入警告/錯誤。查詢其他表,但從不使用它們。這樣的時間最好花在提高人們做有用的事情上的能力上,而不是阻止他們在腳下自殺。 –