CREATE DEFAULT (Transact-SQL)
Cria um objeto chamado padrão. Quando associado a uma coluna ou um tipo de dados de alias, um padrão especifica um valor a ser inserido na coluna á qual o objeto está associado (ou em todas as colunas, no caso de um tipo de dados de alias), quando nenhum valor é fornecido explicitamente durante uma inserção.
Importante
Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez dela, use definições padrão criadas usando a palavra-chave DEFAULT de ALTER TABLE ou CREATE TABLE.
Aplica-se a: SQL Server (SQL Server 2008 à versão atual). |
Convenções da sintaxe Transact-SQL
Sintaxe
CREATE DEFAULT [ schema_name . ] default_name
AS constant_expression [ ; ]
Argumentos
schema_name
É o nome do esquema ao qual o padrão pertence.default_name
É o nome do padrão. Os nomes padrão devem obedecer às regras para identificadores. Especificar o nome do proprietário do padrão é opcional.constant_expression
É uma expressão que contém somente valores constantes (não pode incluir os nomes de nenhuma coluna ou outros objetos de banco de dados). Podem ser usadas qualquer constante, função interna ou expressão matemática, menos aquelas que contêm tipos de dados de alias. Funções definidas pelo usuário não podem ser usadas. Inclua caractere e constantes de data entre aspas simples ('); constantes monetárias, inteiras e de ponto flutuante não requerem aspas. Dados binários devem ser precedidos por 0x e dados monetários por um sinal de dólar ($). O valor padrão deve ser compatível com o tipo de dados de coluna.
Comentários
Um nome padrão pode ser criado somente no banco de dados atual. Dentro de um banco de dados, os nomes padrão devem ser exclusivos por esquema. Quando um padrão for criado, use sp_bindefault para associá-lo a uma coluna ou a um tipo de dados de alias.
Se o padrão não for compatível com a coluna à qual está associado, o SQL Server gerará uma mensagem de erro ao tentar inserir o valor padrão. Por exemplo, N/A não pode ser usado como padrão para uma coluna numérica.
Se o valor padrão for muito longo para a coluna à qual está associado, ele será truncado.
Instruções CREATE DEFAULT não podem ser combinadas com outras instruções Transact-SQL em um único lote.
Um padrão deve ser descartado antes da criação de um novo com o mesmo nome, mas primeiro sua associação deve ser desfeita executando sp_unbindefault.
Se uma coluna tiver um padrão e uma regra associado a ele, o valor do padrão não deve violar a regra. Um padrão que entra em conflito com uma regra nunca é inserido, e o SQL Server gera uma mensagem de erro sempre que tenta inseri-lo.
Ao ser associado a uma coluna, um valor padrão é inserido quando:
Um valor não é inserido explicitamente.
As palavras-DEFAULT VALUES ou DEFAULT são usadas com INSERT para inserir valores padrão.
Se NOT NULL for especificado ao criar uma coluna e um padrão não for criado para ela, uma mensagem de erro será gerada quando um usuário não fizer uma entrada nessa coluna. A tabela a seguir ilustra o relacionamento entre a existência de um padrão e a definição de uma coluna como NULL ou NOT NULL. As entradas na tabela mostram o resultado.
Definição da coluna |
Nenhuma entrada, nenhum padrão |
Nenhuma entrada, padrão |
Insere NULL, nenhum padrão |
Insere NULL, padrão |
---|---|---|---|---|
NULL |
NULL |
padrão |
NULL |
NULL |
NOT NULL |
Erro |
padrão |
erro |
erro |
Para renomear um padrão, use sp_rename. Para obter um relatório sobre um padrão, use sp_help.
Permissões
Para executar CREATE DEFAULT, no mínimo, um usuário deve ter a permissão CREATE DEFAULT no banco de dados atual e a permissão ALTER no esquema no qual o padrão está sendo criado.
Exemplos
A.Criando um padrão de caractere simples
O exemplo a seguir cria um padrão de caractere chamado unknown.
USE AdventureWorks2012;
GO
CREATE DEFAULT phonedflt AS 'unknown';
B.Associando um padrão
O exemplo a seguir associa o padrão criado no exemplo A. O padrão entra em vigor somente se nenhuma entrada for especificada para a coluna Phone da tabela Contact. Observe que omitir qualquer entrada é diferente de declarar NULL explicitamente em uma instrução INSERT.
Como não existe um padrão chamado phonedflt, a instrução Transact-SQL a seguir gera uma falha. Este exemplo é apenas uma ilustração.
USE AdventureWorks2012;
GO
sp_bindefault 'phonedflt', 'Person.PersonPhone.PhoneNumber';