Примерно в прошлом году у меня возникла проблема с тем, что мои запросы на удаление распознают предложение where. Я не говорю о больших сложных запросах. Даже небольшие простые запросы.
Обычно я спешу, поэтому вместо того, чтобы пытаться проанализировать проблему, я просто использую объединение в подзапросе, чтобы указать, какие строки удалить. Но теперь я хочу знать, что происходит. Я искал другие места в stackoverflow, но эти ошибки всегда были связаны с чем-то очевидным, например, с дополнительной запятой или попыткой использовать предложение where с оператором Insert values.
Виновником сегодня является следующее:
DELETE FROM prc_ContractChanges chgs
WHERE chgs.ChangeTypeID = 1
Подобные конструкции прекрасно работали последние 19 лет. Так почему же вдруг это выдает непристойную ошибку
Incorrect syntax near 'WHERE'.
Я пытался добавить комментарий в ответ на один из приведенных ниже, но каждая попытка заканчивается «при добавлении этого комментария произошла ошибка», поэтому пользовательский интерфейс редактирует исходный вопрос.
Это предложение ниже сработало. Поэтому мне пришло в голову, как бы вы идентифицировали несколько таблиц при удалении с помощью соединения. Поэтому я поместил псевдоним в предложение удаления. Это сработало. Мне пришло в голову, что размещение псевдонима в предложении удаления с удалением одной таблицы также сработает. Так и было.
Вы можете использовать один из следующих синтаксисов:
DELETE prc_ContractChanges
FROM prc_ContractChanges chgs
WHERE chgs.ChangeTypeID = 1
DELETE prc_ContractChanges
WHERE ChangeTypeID = 1
Да, это тоже работает. Кажется, у меня есть смутное воспоминание о том, что примерно в 2001 году я получил ошибку, когда пытался отобразить таблицу в предложении Delete. Я помню, потому что я только что пришел из Access SQL, и результирующий запрос отличался от тех, которые я использовал в Access. (В те дни я делал запрос в графическом интерфейсе доступа, а Access преобразовывал его в SQL. Но это никогда не работало для запросов на удаление.)
Удалите псевдоним chgs до и после WHERE. Я также предполагаю, что prc_ContractChanges — это таблица, а не хранимая процедура.