ALTER TABLE – comando SQL
Modifica programaticamente a estrutura de uma tabela.
Sintaxe
ALTER TABLE TableName1
ADD | ALTER [COLUMN] FieldName1
FieldType [(nFieldWidth [, nPrecision])]
[NULL | NOT NULL]
[CHECK lExpression1 [ERROR cMessageText1]]
[DEFAULT eExpression1]
[PRIMARY KEY | UNIQUE]
[REFERENCES TableName2 [TAG TagName1]]
[NOCPTRANS]
- Or -
ALTER TABLE TableName1
ALTER [COLUMN] FieldName2
[NULL | NOT NULL]
[SET DEFAULT eExpression2]
[SET CHECK lExpression2 [ERROR cMessageText2]]
[DROP DEFAULT]
[DROP CHECK]
- Or -
ALTER TABLE TableName1
[DROP [COLUMN] FieldName3]
[SET CHECK lExpression3 [ERROR cMessageText3]]
[DROP CHECK]
[ADD PRIMARY KEY eExpression3 TAG TagName2]
[DROP PRIMARY KEY]
[ADD UNIQUE eExpression4 [TAG TagName3]]
[DROP UNIQUE TAG TagName4]
[ADD FOREIGN KEY [eExpression5] TAG TagName4
REFERENCES TableName2 [TAG TagName5]]
[DROP FOREIGN KEY TAG TagName6 [SAVE]]
[RENAME COLUMN FieldName4 TO FieldName5]
[NOVALIDATE]
Argumentos
TableName1
Especifica o nome da tabela cuja estrutura é modificada.
ADD [COLUMN] FieldName1
Especifica o nome do campo a ser adicionado.
ALTER [COLUMN] FieldName1
Especifica o nome de um campo existente a ser modificado.
FieldType [( nFieldWidth [, nPrecision]])
Especifica o tipo de campo, a largura do campo e a precisão do campo (número de casas decimais) para um campo novo ou modificado.
FieldType é uma única letra que indica o tipo de dados do campo. Alguns tipos de dados de campo exigem que você especifique nFieldWidth ou nPrecision ou ambos.
NFieldWidth e nPrecision são ignorados para os tipos D, G, I, L, M, P, T e Y. Por padrão, nPrecision será zero (sem casas decimais) se nPrecision não estiver incluído para os tipos B, F ou N.
NULL | NOT NULL
Permite ou impede valores nulos no campo .
Se você omitir NULL e NOT NULL, a configuração atual de SET NULL determinará se valores nulos são permitidos no campo. No entanto, se você omitir NULL e NOT NULL e incluir a cláusula PRIMARY KEY ou UNIQUE, a configuração atual de SET NULL será ignorada e o campo NÃO será NULL por padrão.
CHECK lExpression1
Especifica uma regra de validação para o campo . LExpression1 deve ser avaliado como uma expressão lógica e pode ser uma função definida pelo usuário ou um procedimento armazenado. Sempre que um registro em branco é acrescentado, a regra de validação é verificada. Um erro será gerado se a regra de validação não permitir um valor de campo em branco em um registro acrescentado.
ERROR cMessageText1
Especifica a mensagem de erro exibida quando a regra de validação de campo gera um erro.
DEFAULT eExpression1
Especifica um valor padrão para o campo. O tipo de dados eExpression1 deve ser o mesmo que o tipo de dados do campo.
PRIMARY KEY
Cria uma marca de índice primário. A marca de índice tem o mesmo nome que o campo .
UNIQUE
Cria uma marca de índice candidata com o mesmo nome que o campo.
Observação
Os índices candidatos (criados incluindo a opção UNIQUE, fornecida para compatibilidade ANSI em ALTER TABLE ou CREATE TABLE) diferem dos índices criados usando a opção UNIQUE no comando INDEX. Um índice criado usando UNIQUE no comando INDEX permite chaves de índice duplicadas; índices candidatos não permitem chaves de índice duplicadas.
Valores nulos e registros duplicados não são permitidos em um campo usado para um índice primário ou candidato.
Se você estiver criando um novo campo usando ADD COLUMN, o Visual FoxPro não gerará um erro se você criar um índice primário ou candidato para um campo que dê suporte a valores nulos. No entanto, o Visual FoxPro gerará um erro se você tentar inserir um valor nulo ou duplicado em um campo usado para um índice primário ou candidato.
Se você estiver modificando um campo existente e a expressão de índice primária ou candidata consistir em campos na tabela, o Visual FoxPro verificará os campos para ver se eles contêm valores nulos ou registros duplicados. Se isso ocorrer, o Visual FoxPro gerará um erro e a tabela não será alterada.
REFERENCES TableName2TAGName1
Especifica a tabela pai à qual uma relação persistente é estabelecida. TAG TagName1 especifica a marca de índice da tabela pai na qual a relação se baseia. Os nomes de marca de índice podem conter até 10 caracteres.
NOCPTRANS
Impede a tradução para uma página de código diferente para campos de caracteres e memorandos. Se a tabela for convertida em outra página de código, os campos para os quais NOCPTRANS foi especificado não serão convertidos. NOCPTRANS só pode ser especificado para campos de caracteres e memorandos.
O exemplo a seguir cria uma tabela chamada mytable que contém dois campos de caracteres e dois campos de memorando. O segundo campo de caracteres, char2, e o segundo campo de memorando, memo2, incluem NOCPTRANS para impedir a tradução.
CREATE TABLE mytable (char1 C(10), char2 C(10) NOCPTRANS,;
memo1 M, memo2 M NOCPTRANS)
ALTER [COLUMN] FieldName2
Especifica o nome de um campo existente a ser modificado.
SET DEFAULT eExpression2
Especifica um novo valor padrão para um campo existente. O tipo de dados eExpression2 deve ser o mesmo que o tipo de dados para o campo.
SET CHECK lExpression2
Especifica uma nova regra de validação para um campo existente. LExpression2 deve ser avaliado como uma expressão lógica e pode ser uma função definida pelo usuário ou um procedimento armazenado.
ERROR cMessageText2
Especifica a mensagem de erro exibida quando a regra de validação de campo gera um erro. A mensagem é exibida somente quando os dados são alterados em uma janela Procurar ou Editar.
DROP DEFAULT
Remove o valor padrão de um campo existente.
DROP CHECK
Remove a regra de validação de um campo existente.
DROP [COLUMN] FieldName3
Especifica um campo a ser removido da tabela. Remover um campo da tabela também remove a configuração de valor padrão do campo e a regra de validação de campo.
Se expressões de gatilho ou chave de índice fizerem referência ao campo, as expressões se tornarão inválidas quando o campo for removido. Nesse caso, um erro não é gerado quando o campo é removido, mas as expressões de gatilho ou chave de índice inválidas gerarão erros em tempo de execução.
SET CHECK lExpression3
Especifica a regra de validação de tabela. LExpression3 deve ser avaliado como uma expressão lógica e pode ser uma função definida pelo usuário ou um procedimento armazenado.
ERROR cMessageText3
Especifica a mensagem de erro exibida quando a regra de validação de tabela gera um erro. A mensagem é exibida somente quando os dados são alterados em uma janela Procurar ou Editar.
DROP CHECK
Remove a regra de validação da tabela.
ADD PRIMARY KEY eExpression3TAG TagName2
Adiciona um índice primário à tabela. eExpression3 especifica a expressão de chave de índice primária e TagName2 especifica o nome da marca de índice primário. Os nomes de marca de índice podem conter até 10 caracteres. Se TAG TagName2 for omitido e eExpression3 for um único campo, a marca de índice primário terá o mesmo nome que o campo especificado em eExpression3.
DROP PRIMARY KEY
Remove o índice primário e sua marca de índice. Como uma tabela pode ter apenas uma chave primária, não é necessário especificar o nome da chave primária. A remoção do índice primário também exclui as relações persistentes com base na chave primária.
ADD UNIQUE eExpression4[TAG TagName3]
Adiciona um índice candidato à tabela. eExpression4 especifica a expressão de chave de índice candidata e TagName3 especifica o nome da marca de índice candidata. Os nomes de marca de índice podem conter até 10 caracteres. Se você omitir TAG TagName3 e se eExpression4 for um único campo, a marca de índice candidata terá o mesmo nome que o campo especificado em eExpression4.
DROP UNIQUE TAG TagName4
Remove o índice candidato e sua marca de índice. Como uma tabela pode ter várias chaves candidatas, você deve especificar o nome da marca de índice candidata.
ADD FOREIGN KEY [ eExpression5]TAG TagName4
Adiciona um índice externo (não privado) à tabela. eExpression5 especifica a expressão de chave de índice estrangeira e TagName4 especifica o nome da marca de índice estrangeiro. Os nomes de marca de índice podem conter até 10 caracteres.
REFERENCES TableName2[TAG TagName5]
Especifica a tabela pai à qual uma relação persistente é estabelecida. Inclua TAG TagName5 para estabelecer uma relação com base em uma marca de índice existente para a tabela pai. Os nomes de marca de índice podem conter até 10 caracteres. Se você omitir TAG TagName5, a relação será estabelecida usando a marca de índice principal da tabela pai.
DROP FOREIGN KEY TAG TagName6[SAVE]
Exclui uma chave estrangeira cuja marca de índice é TagName6. Se você omitir SAVE, a marca de índice será excluída do índice estrutural. Inclua SAVE para impedir a exclusão da marca de índice do índice estrutural.
RENAME COLUMN FieldName4TO FieldName5
Permite alterar o nome de um campo na tabela. FieldName4 especifica o nome do campo que é renomeado. FieldName5 especifica o novo nome do campo.
Cuidado
Tenha cuidado ao renomear campos de tabela porque expressões de índice, regras de validação de campo e tabela, comandos e funções podem referenciar os nomes de campo originais.
NOVALIDATE
Especifica que o Visual FoxPro permite que alterações sejam feitas na estrutura da tabela; essas alterações podem violar a integridade dos dados na tabela. Por padrão, o Visual FoxPro impede alter table de fazer alterações que violem a integridade dos dados na tabela. Inclua NOVALIDATE para substituir esse comportamento padrão.
Comentários
ALTER TABLE pode ser usado para modificar a estrutura de uma tabela que não foi adicionada a um banco de dados. No entanto, o Visual FoxPro gerará um erro se você incluir as cláusulas DEFAULT, FOREIGN KEY, PRIMARY KEY, REFERENCES ou SET ao modificar uma tabela livre.
ALTER TABLE pode recompilar a tabela criando um novo cabeçalho de tabela e acrescentando registros ao cabeçalho da tabela. Por exemplo, alterar o tipo ou a largura de um campo pode fazer com que a tabela seja recriada.
Depois que uma tabela é recriada, as regras de validação de campo são executadas para todos os campos cujo tipo ou largura é alterado. Se você alterar o tipo ou a largura de qualquer campo na tabela, a regra de tabela será executada.
Se você modificar regras de validação de campo ou tabela para uma tabela que tenha registros, o Visual FoxPro testará as novas regras de validação de campo ou tabela em relação aos dados existentes e emitirá um aviso sobre a primeira ocorrência de uma regra de validação de campo ou tabela ou de uma violação de gatilho.
Se a tabela que você modificar estiver em um banco de dados, ALTER TABLE – SQL exigirá o uso exclusivo do banco de dados. Para abrir um banco de dados para uso exclusivo, inclua EXCLUSIVE em OPEN DATABASE.