Помечает запись на удаление.

Обратите внимание:
Записи, отмеченные для удаления физически не удаляются из таблицы до применения команды PACK . Вы можете отменить (снять выделение) удаление записей, используя команду RECALL . Для подробной информации, см. PACK Command и RECALL Command .

DELETE [Target] FROM [FORCE] Table_List [[, Table_List ...] | [JOIN [ Table_List]]]
[WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]

Параметры

DELETE [ Target ]

Определяет целевую таблицу, курсор, таблицу или псевдоним курсора, или файл для операции удаления. Если FROM определяет больше чем одну таблицу, Вы должны включить параметр Target . Target может иметь следующие синтаксисы:
  • [ DatabaseName !] TableName

    DatabaseName ! определяет имя базы данных, содержащей таблицу, если таблица находится в нетекущей базе данных. Если таблица находится в нетекущей базе данных, Вы должны включить имя базы данных. Используйте восклицательный знак (!) как разделитель сразу после имени базы данных и перед именем таблицы.

    TableName определяет имя таблицы для операции удаления.

  • Alias

    Alias определяет псевдоним, который соответствует таблице в предложении FROM или курсору в текущей сессии данных для операции удаления.

  • FileName

    FileName определяет имя файла для операции удаления.

FROM [FORCE] Table_List [[, Table_List ...] | [JOIN [ Table_List ]]]

Определяет одну или более таблиц, содержащих данные для операции удаления. Предложение FROM имеет тот же самый синтаксис как в команде SQL SELECT если бы не следующие ограничения:
  • Целевая таблица или курсор не могут быть включены в соединение OUTER как вторичная таблица или курсор.

  • Должна иметься возможность оценить все другие операции JOIN перед выполнением операции JOIN на целевой таблице.

  • Целевой курсор не может быть результатом подзапроса.

Для подробной информации, см. SELECT - SQL Command . FORCE определяет что таблицы в Table_List соединяются в порядке их перечисления в предложении FROM .
Обратите внимание:
Если FORCE опущен, Visual FoxPro пытается оптимизировать операцию удаления. Однако, операция удаления может быть выполнена быстрее применением ключевого слова FORCE для отключения оптимизации удаления Visual FoxPro.

Table_List может иметь следующие синтаксисы:
  • [ DatabaseName !] Table [[AS] Local_Alias ]

    DatabaseName ! определяет имя базы данных, содержащей таблицу, если таблица находится в нетекущей базе данных. Если таблица находится в нетекущей базе данных, Вы должны включить имя базы данных. Используйте восклицательный знак (!) как разделитель немедленно после имени базы данных и перед именем таблицы.

    Table определяет имя таблицы или курсора, из которых Вы хотите извлечь данные. Если нет открытых таблиц, Visual FoxPro отображает диалоговое окно Open, так что Вы можете определить местонахождение файла. После того, как таблица открывается, она остается открытой и после завершения запроса.

    Local_Alias определяет временное имя для таблицы, указанной в Table . Если Вы определяете локальный псевдоним, Вы должны использовать этот локальный псевдоним вместо имени таблицы в любом месте инструкции DELETE . Псевдоним может представлять таблицу или курсор.

    JOIN обеспечивает возможность определить одну или более вторичных таблиц. Нет никакого жестко заданного предела количества таблиц, псевдонимов, или предложений JOIN в инструкции DELETE .

  • ( Subquery ) AS Subquery_Alias

    Subquery определяет инструкцию SELECT в пределах другой инструкции SELECT . Для подробной информации о подзапросах в инструкции SELECT см. SELECT - SQL Command - FROM Clause .

WHERE FilterCondition1 [AND | OR FilterCondition2 ...]

Определяет одно или более условий фильтра для удаляемых записей. Нет никаких ограничений по количеству условий фильтра в предложении WHERE . Для обращения значение логического выражения, используйте оператор NOT . Чтобы проверять пустое поле, используйте функцию EMPTY( ) . Для подробной информации, см. EMPTY( ) Function .

Замечания

Если команда SET DELETED установлена в ON , записи, отмеченные для удаления игнорируются всеми командами, которые содержат scope. Для подробной информации, см. SET DELETED Command .

Чтобы определять количество модифицированных записей, используйте значение системной переменной _TALLY немедленно после выполнения команды SQL DELETE . Для подробной информации, см. _TALLY System Variable .

Совет:
При маркировке на удаление нескольких записей таблицы, открытой для разделяемого доступа, SQL DELETE использует блокировку записей, в отличие от команды DELETE . Это уменьшает конфликты записей в многопользовательских ситуациях, но может уменьшить скорость выполнения. Для максимальной скорости выполнения, откройте таблицу для монопольного использования или применяйте функцию FLOCK( ) для блокировки таблицы. Для подробной информации, см. DELETE Command и FLOCK( ) Function .

Пример 1

Описание

Следующий пример использует команду OPEN DATABASE , чтобы открыть тестовую базу данных Visual FoxPro TestData.dbc. Команда USE открывает таблицу "Клиенты" в TestData.dbc. Инструкция SQL DELETE помечает те записи на удаление, в которых поле Country содержит "USA". Команда CLEAR очищает главное окно Visual FoxPro. Команда LIST выводит все записи, отмеченные для удаления. После применения команды LIST , если будет вызвана команда PACK , отмеченные записи будут удалены.

Команда RECALL ALL снимает выделение всех записей, помеченных на удаление. Команда COUNT проверяет количество записей, помеченных на удаление, подсчитывая их. WAIT WINDOW выводит то количество записей, которые были помечены на удаление.

Код

Скопировать код
CLOSE DATABASES
CLEAR
OPEN DATABASE HOME(2)+"Data\TestData"
USE Customer
DELETE FROM Customer WHERE country = "USA"
CLEAR
LIST FIELDS company, country FOR DELETED( )
WAIT WINDOW "Records currently marked for deletion"+CHR(13) + ;
"Press any key to revert..."
RECALL ALL
CLEAR
COUNT FOR DELETED( )=.T. TO nDeleted
WAIT WINDOW ALLTRIM(STR(nDeleted)) + " records marked for deletion."

Комментарии

Для подробной информации, см. OPEN DATABASE Command , USE Command , LIST Commands , CLEAR Commands , COUNT Command , and WAIT Command .

Пример 2

Описание

Следующий код показывает коррелированное удаление, в котором записи курсора MyProducts помечаются на удаление в зависимости от значения поля Discontinued курсора MSRPList. Предложение WHERE определяет критерий соответствия записей и условие сравнения для того, чтобы пометить записи.

Код

Скопировать код
CLOSE DATABASES ALL
CREATE CURSOR MyProducts (ProdID I , OurPrice Y NULL)
INSERT INTO MyProducts VALUES (1,1.10) && соответствуют но не помечаются для удаления
INSERT INTO MyProducts VALUES (2,2.20) && соответствуют и помечаются
INSERT INTO MyProducts VALUES (3,3.30) && соответствуют и помечаются
CREATE CURSOR MSRPList (ProdID I , ProdCategory I Null, MSRP Y, Discontinued L)
INSERT INTO MSRPList VALUES (1, 9, 1.00, .f.)
INSERT INTO MSRPList VALUES (2, 8, 2.00, .t.)
INSERT INTO MSRPList VALUES (3, 7, 3.00, .t.)
DELETE MyProducts FROM MSRPList ;   WHERE MSRPList.ProdID = MyProducts.ProdID;      AND MSRPList.discontinued = .t. SELECT MyProducts BROWSE

Комментарии

Для подробной информации и демонстрации другого примера, см. SQL Language Improvements .

See Also