Программно изменяет структуру таблицы. Имеется несколько версий синтаксиса этой команды.

ALTER TABLE TableName1 ADD | ALTER [COLUMN] FieldName1 
      FieldType [( nFieldWidth [, nPrecision])] [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]] 
   [AUTOINC [NEXTVALUE NextValue [STEP StepValue]]] [DEFAULT eExpression1] 
   [PRIMARY KEY | UNIQUE [COLLATE cCollateSequence]] 
   [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS] [NOVALIDATE]
ALTER TABLE TableName1 ALTER [COLUMN] FieldName2 [NULL | NOT NULL] [SET DEFAULT eExpression2] 
   [SET CHECK lExpression2 [ERROR cMessageText2]] [ DROP DEFAULT ] [ DROP CHECK ] [ NOVALIDATE ]
ALTER TABLE TableName1 [DROP [COLUMN] FieldName3] 
   [SET CHECK lExpression3 [ERRORcMessageText3]] [DROP CHECK] 
   [ADD PRIMARY KEY eExpression3 [FOR lExpression4] TAG TagName2
   [COLLATE cCollateSequence]] [DROP PRIMARY KEY] 
   [ADD UNIQUE eExpression4 [[FOR lExpression5] TAG TagName3 
      [COLLATE cCollateSequence]]] [DROP UNIQUE TAG TagName4] 
   [ADD FOREIGN KEY [eExpression5] [FOR lExpression6] TAG TagName4 
      REFERENCES TableName4 [TAG TagName4][COLLATE cCollateSequence]
      REFERENCES TableName2 [TAG TagName5]] 
   [DROP FOREIGN KEY TAG TagName6 [SAVE]] 
   [RENAME COLUMN FieldName4 TO FieldName5] [NOVALIDATE]

Параметры

ALTER TABLE TableName1

Изменяет структуру таблицы. Параметр TableName1 определяет имя таблицы, подлежащей изменению.

ADD | ALTER [COLUMN] FieldName1

Определяет имя добавляемого или изменяемого поля.

Единичная таблица может содержать до 255 полей. Если одно или более полей позволяют принимать значения null, ограничение увеличивается на одно поле и составляет 254 поля.

Использование ALTER COLUMN сбрасывает collating sequence к значение по умолчанию. Вы должны повторно индексировать таблицу с желаемом collating после производства ALTER COLUMN. Вы, кроме того, можете использовать ключевое слово COLLATE в команде ALTER TABLE когда это удовлетворяет условиям (первичеый ключ или внешний ключ).

FieldType[( nFieldWidth[, nPrecision])]

Определяет тип поля, его длину и точность (число десятичных мест) для нового или изменяемого поля.

FieldType может быть единичной буквой, указывающей  тип данных, которые будут храниться в поле или длинные имена, определяющие их. Некоторые типы полей требуют, чтобы указали  nFieldWidth или nPrecision или оба. В приведенной ниже таблице перечислены значения для  FieldType, а также случаи, когда требуются nFieldWidth и nPrecision:

FieldType nFieldWidth nPrecision Тип хранимых данных

W, Blob

-

-

Blob

C, Char, Character

N

Character поле с длиной  n

Y, Currency

Currency

D, Date

Date

T, DateTime

DateTime

B, Double

D

Double

G, General

General

I, Int, Interger

Integer

L, Logical

Logical

M, Memo

Memo

N, Num, Numeric

N

D

Numeric численное поле с длиной n с d десятичными местами

F, Float

N

D

Floating Numeric поле с длиной n с d десятичными местами

Q, Varbinary

n

-

Varbinary поле с длиной n

V, Varchar

n

-

Varchar поле с длиной n

Параметры nFieldWidth и nPrecision игнорируются для типов W, Y, D, T, G, I, L и M. Если nPrecision не включена для типов N, F или B, параметр nPrecision устанавливается по умолчанию в zero (нет десятичных мест).

NULL | NOT NULL

Определяет будут ли позволены null значения в содержании поля. NULL разрешает null значения, а NOT NULL не позволяет их. Если одно или более полей могут содержать null значения, максимальное число полей возможное в таблице ограничивается числом  254.

NoteЗамечание

Изменение структуры поля, которое используется в бинарном индексе на тип, позволяющий использовать  null значения приведет к генерации ошибки.

CHECK lExpression1

Определяет правило проверки для поля. Параметр lExpression1 должен оцениваться в логическое выражение и может быть определенной пользователей функцией или хранимой процедурой. Visual FoxPro проверяет правило проверки, определенное для ключевого слова CHECK в случае, когда добавляется пустая запись.

ERROR cMessageText1

Определяет сообщение об ошибке. Visual FoxPro отображает это сообщение, когда правило проверки, указанное для ключевого слова CHECK генерирует ошибку. Это сообщение отображается только в случае, если данные изменяются в окнах Browse или Edit.

AUTOINC [NEXTVALUE NextValue[STEP StepValue]]

Разрешает автоматическое увеличение значения для поля. NextValue определяет начальное значение и может быть положительным или отрицательным числом в диапазоне от 2,147,483,647 до -2,147,483,647. Значение по умолчанию равно единице (1). Вы можете установить NextValue используя спиннер Next Value на закладке Fields дизайнера таблиц.

StepValue определяет значение увеличения для поля и может быть положительным, ненулевым целым числом в диапазоне от 1 до 255. Значение по умолчанию равняется единице (1). Вы можете установить StepValue используя спиннер Step на закладке Fields дизайнера таблиц.

Значения Autoincrementing не могут быть NULL.

NoteЗамечание

Таблицы, содержащие поля, допускающие автоувеличение добавляют записи в буферированные таблицы примерно на  35% медленнее, чем таблицы не содержащие таких полей, что может оказать воздействие на производительность приложения. При использовании буферизации таблиц, заголовок таблицы блокируется в случае, когда добавляются записи .

DEFAULT eExpression1

Определяет значение по умолчанию для поля, указанного в  FieldName1. Тип данных eExpression1 , естественно, должен быть точно таким же, как и тип данных поля.

Вы не можете указать значение по умолчанию, если вы используете опцию AUTOINC для включения автоувеличения значений поля. Visual FoxPro генерирует сообщение об ошибке, если вы одновременно указали обе опции - и AUTOINC, и DEFAULT для одного и того же поля.

PRIMARY KEY | UNIQUE

PRIMARY KEY создает первичный индекс для поля, указанного в FieldName1. UNIQUE создает индекс-кандидат (candidate) для поля указанного в FieldName1. Тэг первичного индекса или тэг индекса-кандидата имеют те же самые имена, что и имя поля. Для получения более подробной информации о первичных индексах и индексах-кандидатах смотрите  Типы индексов Visual FoxPro.

COLLATE cCollateSequence

Определяет последовательность сопоставления (collation sequence), которая отличается от используемой по умолчанию - MACHINE. Параметр cCollateSequence должен быть действительной последовательностью сопоставления Visual FoxPro. Для получения более подробной информации смотрите Оптимизация приложений для международного использования (Optimizing International Applications) и команду SET COLLATE.

REFERENCES TableName2[TAG TagName1]

Определяет родительскую таблицу, для которой установлены постоянные связи (ссылочной целостности). Родительская таблица не может быть свободной таблицей.

Параметр TagName1 определяет имя тэга индекса для родительской таблицы указанной в  TableName2. Имена тэгов индексов могут содержать до 10-ти символов. Если вы опустите опцию TAG, связь устанавливается на основе использования первичного индексного ключа родительской таблицы. Если родительская таблица не имеет первичного индекса, Visual FoxPro сгенерирует ошибку.

NOCPTRANS

Предотвращает трансляцию в разные кодовые страницы для полей с типами данных Character, Memo или Varchar. Соответственно только для полей этих типов вы и можете указать ключевое слово NOCPTRANS. Это создаст то, что появится в дизайнере таблиц в виде типов полей Character (Binary), Memo (Binary) и Varchar (Binary).

NOVALIDATE

Определяет, что Visual FoxPro позволяет сделать изменения в структуре таблице, которые могут нарушать целостность данных в таблице. По умолчанию, Visual FoxPro препятствует ALTER TABLE в производстве таких изменений в структуре таблицы. Для перевешивая поведения по умолчанию включите ключевое слово NOVALIDATE в вашу команду.

ALTER [COLUMN] FieldName2

Определяет имя поля, подлежащего изменению. Вам необходимо включить опцию ALTER COLUMN для изменения более чем одного свойства поля в единичной команде ALTER TABLE. Для получения более подробной информации о том, как ALTER COLUMN структурирован - смотрите пример в этой статье.

SET DEFAULT eExpression2

Определяет новое значение по умолчанию для существующего поля. Тип данных выражения eExpression2 должен быть такого же типа, как и тип данных поля, для которого устанавливается это значение.

Вы не можете установить значение по умолчанию, если вы используете опцию AUTOINC для активизации автоувеличения значений, хранящихся в поле. Visual FoxPro сгенерирует ошибку, если вы одновременно укажите обе опции - и AUTOINC и SET DEFAULT.

SET CHECK lExpression2

Определяет новое правило проверки для существующего поля. Параметр lExpression2 должен оцениваться в логическое выражение и может являться функцией, определенной пользователем или хранимой процедурой.

ERROR cMessageText2

Определяет сообщение об ошибке. Visual FoxPro отображает это сообщение, когда правило проверки, указанное для ключевого слова SET CHECK генерирует ошибку. Это сообщение отображается только в случае, если данные изменяются в окнах Browse или Edit..

DROP DEFAULT

Удаляет значение по умолчанию для существующего поля.

DROP CHECK

Удаляет правило проверки для существующего поля.

DROP [COLUMN] FieldName3

Определяет поле, которое будет удалено из таблицы. Удаление поля из таблицы, кроме этого, удаляет значение по умолчанию, если такое было установлено и правило проверки для поля.

Если индексный ключ или выражение триггера ссылаются на это поле, то выражение становится недействительным при удалении поля. В этом случае ошибка не генерируется, когда поле удаляется, однако недействительные индексный ключ или выражение триггера сгенерируют ошибку в  run time.

SET CHECK lExpression3

Определяет правило проверки для таблицы. Параметр lExpression3 должен оцениваться в логическое выражение и может являться функцией, определенной пользователем или хранимой процедурой.

ERROR cMessageText3

Определяет сообщение об ошибке правила проверки для таблицы в  lExpression3. Visual FoxPro отображает это сообщение, когда правило проверки для таблицы генерирует ошибку. Это сообщение отображается только в случае, если данные изменяются в окнах Browse или Edit.

DROP CHECK

Удаляет правило проверки для таблицы.

ADD PRIMARY KEY eExpression3[FOR lExpression4] TAG TagName2

Добавляет первичный ключ в таблицу. eExpression3 определяет выражение первичного индексного ключа.

Вы можете использовать lExpression4 для указания выражения фильтра, по которому только те записи, которые удовлетворяют условию будут открыты для отображения и доступа. Первичный индексный ключ создается в индексном файле только для тех записей, которые удовлетворяют выражению фильтра. ВЫ должны избегать использования опции FOR при создании первичного индекса; неуникальность первичного ключа оказывает влияние только на те записи, которые соответствуют условию, определенному в опции FOR. Виесто этого, используйте команду INDEX с опцией FOR для создания фильтрованного индекса.

Rushmore Query Optimization оптимизирует команду ALTER TABLE ... FOR lExpression4, если выражение lExpression4 может быть оптимизировано. Для получения наивысшей производительности, используйте оптимизируемые выражения в опции FOR. Для получения более подробной информации обратитесь с статьям SET OPTIMIZE Command и Использование Rushmore Query Optimization для увеличения скорости доступа к данным.

Параметр TagName2 определяет имя тэга первичного индекса. Имена тэгов индексов могут содержать до 10 символов. Если вы опустите TAG TagName2 и eExpression3 представляет собой единичное поле, тэг первичного индекса будет иметь то же самое имя, что и имя поля, указанное в eExpression3.

DROP PRIMARY KEY

Удаляет первичный индекс и его индексный тэг. Таблица может иметь только первичный ключ, поэтому вам не требуется указывать имя первичного ключа. Удаление первичного индекса удаляет, также, все постоянные связи, основанные на первичном ключе.

ADD UNIQUE eExpression4[TAG TagName3[FOR lExpression5]]

Добавляет в таблицу индекс-кандидат. Параметр eExpression4 определяет выражение для ключа индекса-кандидата. Параметр TagName3 определяет имя тэга индекса. Имя тэга индекса может содержать до 10 символов. Если вы опустите TAG TagName3, и если eExpression4 представляет собой единичное поле, имя тэга индекса-кандидата будет то же самое имя, что и имя поля, указанное в  eExpression4.

ВЫ можете использовать параметр lExpression5 для указания выражения фильтра, где только записи, удовлетворяющие условию фильтра будут открыты для отображения и доступа. Ключи индексов-кандидатов создаются в индексном файле только для тех записей, которые удовлетворяют условию выражения фильтра.

Rushmore оптимизирует команду ALTER TABLE ... FOR lExpression5 если выражение  lExpression5 может быть оптимизировано. Для получения наивысшей производительности, используйте оптимизируемые выражения в опции FOR. Для получения более подробной информации обратитесь с статьям SET OPTIMIZE Command и Использование Rushmore Query Optimization для увеличения скорости доступа к данным.

DROP UNIQUE TAG TagName4

Удаляет индекс-кандидат и его индексный тэг. Таблица может иметь множество ключей кандидатов, поэтому вам необходимо указать имя тэга удаляемого индекса.

ADD FOREIGN KEY [ eExpression5] TAG TagName4[FOR lExpression6]

Добавляет в таблицу внешний  (не первичный) индекс. Параметр eExpression5 определяет выражение внешнего индексного ключа. Параметр TagName4 определяет имя тэга внешнего индекса. Имя тэга индекса может содержать до 10 символов.

Вы можете использовать параметр lExpression6 для указания выражения фильтра, где только записи, удовлетворяющие условию фильтра будут открыты для отображения и доступа.  Внешние индексные ключи создаются в индексном файле только для тех записей, которые удовлетворяют условию выражения фильтра.

Rushmore оптимизирует команду ALTER TABLE ... FOR lExpression6 если выражение  lExpression6 может быть оптимизировано. Для получения наивысшей производительности, используйте оптимизируемые выражения в опции FOR. Для получения более подробной информации обратитесь с статьям SET OPTIMIZE Command и Использование Rushmore Query Optimization для увеличения скорости доступа к данным.

REFERENCES TableName2[TAG TagName5]

Определяет родительскую таблицу, для которой установлены отношения ссылочной целостности. Вы можете использовать опцию TAG TagName5 для установки отношения, основанной на существующем индексном тэге родительской таблицы. Имена индексных тэгов могут содержать до  10 символов. Если вы опустите опцию TAG, Visual FoxPro установить связь, используя тэг первичного ключа родительской таблицы.

DROP FOREIGN KEY TAG TagName6[SAVE]

Удаляет внешний ключ, чей индексный тэг указан в TagName6. Вы можете использовать опцию SAVE для сохранения индексного тэга в структурном индексе. Если вы опустите SAVE, индексный тэг будет удален из структурного индекса.

RENAME COLUMN FieldName4TO FieldName5

Предоставляет вам возможность изменить имя поля в таблице. Параметр FieldName4 определяет имя поля, которое будет изменено. Параметр FieldName5 определяет новое имя для поля.

Caution noteПредупреждение

Будьте внимательны, когда переименовываете имена полей, так как индексные выражения, правила проверки для полей и таблиц, команды и функции и тому подобное могут ссылаться на оригинальные имена полей.

Expand imageПримечания

Expand imageПример

Expand imageСмотрите также