Я пытаюсь понять, почему это обновление не дает сбоя, и вместо этого обновляет таблицу, даже если подзапрос содержит неверное имя столбца, которого нет в таблице, из которой он выбирается.Если вы выполняете подзапрос самостоятельно, он возвращает синтаксическую ошибку.Не должно ли произойти сбой обновления и выдать ошибку?Как это интерпретируется?Сотрудник предположил, что он может интерпретировать это как перекрестное применение, является ли это возможностью?
Create table MyTable(column1 nvarchar(max), column2 nvarchar(max) , exclude nvarchar(max))
Create table MyTable2(c1 varchar)
INSERT INTO MyTable (column1, column2, exclude)
VALUES
('Fred', 'Smith',0),
('John', 'Smith',0),
('Michael', 'Smith',0),
('Robert', 'Smith',0);
INSERT INTO MyTable2
( c1)
VALUES
('x' ),
('y'),
('w'),
('n')
Update [MyTable] set [exclude] = 1 where [column1] in (select [column1] from [MyTable2])
drop table MyTable
drop table MyTable2
В подзапросе для обновления Column1 не существует.Несмотря на это, обновление выполняется в каждой строке таблицы.Если вы выполняете подзапрос самостоятельно, он возвращает синтаксическую ошибку.
Ожидаемое поведение: обновление завершится неудачно, и транзакция будет откатана