Изменяет исходные записи Таблицы соответствущими откорректированными данными.
![]() |
---|
Команда SQL UPDATE может изменить данные только в записях одной Таблицы. |
UPDATE Target |
Параметры
- UPDATE Target
-
Определяет имя Базовой Таблицы, Курсора, алиаса Таблицы или Курсора, или имя файла, где выполняются требуемые изменения. Вы можете указать несколько источников данных для операции изменения в соответствующей секции FROM. Target может иметь один из следующих возможных вариантов синтаксиса:
-
[DatabaseName!]TableName
DatabaseName! определяет имя базы данных, к которой прикреплена соответствующая таблица, если она (таблица) не закреплена за текущей базой данных. Если рассматриваемая таблица не относится к текущей базе данных, вы должны обязательно указать имя родительской базы данных. В качестве разделителя-соединителя между именем родительской базы данных и именем дочерней таблицы используется восклицательный знак (!).
TableName определяет имя таблицы, в которой выполняются изменения.
-
Alias
Alias определяет имя алиаса соответствующей таблицы, в которой выполняются изменения данных из источников, которые задаются в секции FROM.
-
FileName
FileName определяет имя файла, в котором выполняются рассматриваемые изменения данных.
-
- SET Column_Name1= eExpression1 [, Column_Name2 = eExpression2 ...]
-
Определяет имя столбца в изменяемой таблице, в который заносятся новые значения. Если вы не используете секцию WHERE, каждая запись таблицы назначения будет содержать новые значения указанных столбцов.
Если вы хотите использовать значения некоторых свойств объекта исходных данных в качестве expression, вы должны определить соответствующую переменную памяти для указанного объекта, а за тем ее использовать. Например, вы можете выполнить следующее
x = oColField("iid").Value
и, после этого, указавать конструкцию SET какset iid = x
, в рассматриваемой команде UPDATE - SQL . Если вы используете следующую нотацию при обращении к свойствам объекта objectname.property, непосредственно в выражении expression, то в этом случае возникает Ошибочная ситуация; отсутствие указанного Алиаса objectname.В качестве выражения в конструкции SETможно использовать некоторый Подзапрос, возвращающий требуемое выражение. Если выполняемый подзапрос не возвращает никакого результата, то предполагается значение = NULL. Общий синтаксис и дополнительная информация о Подзапросах представлена в следующем разделе SELECT - SQL, команда - FROM, секция.
Обратите внимание
Если вы используете Подзапрос в секции SET, тогда вы не можете использовать Подзапрос в секции WHERE. Подзапросы в секции SET должны удовлетворять тем же условиям, как и в конструкциях сравнения или соединения.
- [FROM [FORCE] Table_List_Item[[, ...] | [JOIN [ Table_List_Item]]]
-
Определяет одну или несколько таблиц данных для выполнения операции Изменения данных.
Секция FROM имеет аналогичный синтаксис, как и в команде SQL SELECT, за исключением следующих ограничений:
-
Изменяемая Таблица или Курсор не может быть включена в качестве присоединяемой таблицы при соединении типа OUTER Join.
-
Данная операция изменения не должна "ломать" другие существующие Соединения JOIN, при выполнении операции Соединения JOIN для изменяемой таблицы.
-
Результирующий Курсор не должен быть результатом выполнения Подзапроса.
Дополнительная информацию имеется в следующем разделе SELECT - SQL, Команда.
FORCE - определяет, что указанные присоединяемые таблицы обрабатываются в том порядке, в котором они указаны в секции FROM.
Обратите Внимание
Если опция FORCE - отсутствует, Visual FoxPro пытается оптимизировать выполнение рассматриваемой операции Изменения. Однако, Операция Изменения данных может выполняться значительно быстрее при использовании ключевого слова FORCE, в этом слечае система Visual FoxPro отключает оптимизацию операции Изменения.
Table_List_Item может иметь следующий Синтаксис:
-
[DatabaseName!]Table [[AS] Local_Alias]
DatabaseName! определяет имя базы данных, к которой прикреплена таблица исходных данных, и она (таблица) не закреплена к текущей (открытой) базе данных. Если таблица исходных данных не входит в текущую базу данных, вы должны указать имя родительской базы данных. В качестве разделителя между именами родительской базой данных и дочерней таблицей используется восклицательный знак (!).
Tableопределяет имя таблицы исходных данных для проведения операции Изменения. Если указанная таблица не открыта, тогда система Visual FoxPro отображает системный дталоговый бокс Открытия требуемой таблицы, для выбора необходимого файла. После открытия указанной таблицы она остается открытой после выполнения рассматриваемой операции.
Local_Alias определяет локальный (внутренний) алиас исходной таблицы Table. Если вы используете локальный алиас для конкретной таблицы, вы должны всюду, в рамках команды UPDATE, использовать данный алиас при ссылке на эту таблицу. Локальный алиас может использоваться как для таблиц, так и для Курсоров.
Конструкция JOIN обеспечивает задание одной или нескольких присоединяемых исходных таблиц данных для операции Изменения. Нет существенных ограничений по лимитированию количества таблиц или курсоров присоединяемых секцией JOIN в одной команде UPDATE.
-
(Subquery) AS Subquery_Alias
Определяет некоторый Подзапрос в виде стандартного оператора SELECT, который является другим оператором выборки SELECT. Дополнительная информацию по использованию Подзапросов в стандартных операторах SELECT представлена при описании секции FROM в разделе: SELECT - SQL, Команда.
-
- WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]
-
Определяет одно или несколько Условий Критерия Фильтра, который отбирает удовлетворяющие записи, в которые вносятся изменения, новые значения полей. В рассматриваемой команде не ограничивается количество логических выражений, указываемых в секции WHERE .
Для отрицания логического выражения применяется логический операнд NOT. Для проверки пустого значения некоторого поля используется функция EMPTY( ). Смотрите дополнительную информацию в разделе: EMPTY( ), функция.
Комментарии
После выполнения команды Изменения данных, количество изменненых записей помещается в системную переменную _TALLY . Смотрите дополнительно раздел: _TALLY, системная переменная.
![]() |
---|
Когда выполняется Изменение нескольких записей в Таблице, открытой для коллективного доступа к Данным (shared access), команда SQL UPDATE использует последовательно механизм блокировки изменяемых Записей, в отличие от работы команды REPLACE. Данный подход позволяет уменьшить конкуренцию в многопользовательской среде и повышает скорость обработки Запроса на Изменение. Для максимальной надежности откройте изменяемую таблицу в Монопольном (exclusive) режиме или используйте функцию блокирования файла таблицы: FLOCK( ). Смотри дополнительно раздел: FLOCK( ), функция. |
В секции SET указанные операторы Изменения данных система Visual FoxPro выполняет в обычной последовательности. Например, если вы используете следующую команду: UPDATE table1 SET field1 = field2, field2=field1
, значения указанных полей не изменяются, значения для обоих полей являются одинаковыми.
Наследуемые примеры Программного Кода
Пример 1
В следующем примере используется команда OPEN DATABASE - для открытия соответствующей тестовой базы данных Visual FoxPro; команда USE - для открытия таблицы Customer, из TestData.dbc. Команда SQL UPDATE изменяет все записи в указанной таблице; осуществляется Изменение поля MaxOrdAmt field = 25.
![]() | |
---|---|
CLOSE DATABASES |
Смотрите дополнительно разделы: USE, команда и BROWSE, команда.
Пример 2
В следующем примере: с помощью команды OPEN DATABASE открывается тестовая база данных Visual FoxPro; TestData.dbc. Команда SQL SELECT выполняет выборку требуемых данных из таблицы Products, из открытой базы данных TestData.dbc, результаты размещаются в новой таблице с именем MyProductsList, отображаются в системном окне Browse.
С помощью команды CREATE CURSOR - создается новый курсор MyUpdateTable, в который добавляется новая запись со значение поля Prod_Unit = 10; данные также отображаются в окне Browse.
В команде SQL UPDATE выполняется изменение поля In_Stock, из таблицы MyProductsList новым значением из созданного курсора MyUpdateTable, для тех записей, для которых выполняется условие product name = "Chai". Далее: выполняется выборка измененных записей и результаты отображаются в системном окне Browse, смотри последний оператор SQL SELECT .
![]() | |
---|---|
CLOSE DATABASES |
Смотри дополнительные разделы: OPEN DATABASE, команда, BROWSE, команда, CREATE CURSOR - SQL, команда, и INSERT - SQL, команда .
Примеры Программного Кода
Пример 3
В следующем примере демонстрируется использование Подзапроса, как вычисляемого выражения, которое заносится в соответствующее поле, секция SET. В рассматриваемом Запросе изменяются все записи в таблице Products. Вычисление требуемого значения осуществляется согласно следующему условию: связываются исходные таблицы, по указанному полю productID и для которых выполняется указанное условие.
![]() | |
---|---|
UPDATE products ; |
Пример 4
В следующем далее примере демонстрируется использование Корреляционного (зависимого) Изменения для заданного сложного условия отбора записей, которое существенно отличается от условия из примера 3.
![]() | |
---|---|
UPDATE products ; |
Пример 5
В представленном далее примере демонстрируется тот факт, что при корреляционном изменении используется только первая найденная запись источника данных для изменения, по указанному критерию отбора. Остальные записи игнорируются. В представленном примере создается два временных Курсора. Первый используется для проведения изменений. Второй курсор используется для хранения новых значений, которые будут вноситься в первый курсор. В этом курсоре хранятся данные, которые будут использоваться для изменения: две первых записи - удовлетворяют критерию отбора; третья запись - не соответствует; четвертая запись отбрасывается, так как совпадает по коду с первой записью ProdID =1? rjnjhfz e;t bcgjkmpetncz.
![]() | |
---|---|
CLOSE DATABASES ALL |