Para inserir dados em uma tabela com colunas com restrições padrão, podemos usar a restrição DEFAULT para um valor padrão em uma tabela. Este artigo abordará os seguintes aspectos:
- A restrição DEFAULT e a permissão necessária para criá-los.
- Adicionar uma restrição DEFAULT ao criar uma nova tabela.
- Adicionar uma restrição DEFAULT em uma tabela existente.
- Modificar e visualizar a definição de restrição usando scripts T-SQL e SSMS.
O que é DEFAULT CONSTRAINT no SQL Server?
Uma restrição padrão especifica o valor padrão para a coluna.
Quando executamos a instrução INSERT mas não especificamos nenhum valor para a coluna com a restrição padrão criada, o SQL Server insere o valor padrão especificado na definição da restrição DEFAULT.
Para criar uma restrição padrão, você precisa das permissões ALTER TABLE e CREATE TABLE.
Adicionando uma restrição DEFAULT ao criar uma nova tabela
Há uma tabela chamada SalesDetails . Quando inserimos dados na tabela sem especificar a Sale_Qty valor da coluna, a consulta deve inserir zero. Para fazer isso, estou criando uma restrição padrão chamada DF_SalesDetails_SaleQty na Sale_Qty coluna.
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT CONSTRAINT df_salesdetails_saleqty DEFAULT 0
)
Agora, vamos testar o comportamento da restrição inserindo alguns registros fictícios nela. Execute a seguinte consulta:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Use a seguinte consulta para visualizar os dados da tabela:
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Saída
Como você pode ver, o zero foi inserido no Sale_Qty coluna.
Ao criar uma tabela, não especificamos o nome da restrição DEFAULT. O SQL Server cria uma restrição com um nome exclusivo gerado pelo sistema.
Crie a tabela usando a consulta abaixo:
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT DEFAULT 0
)
Execute o seguinte script para visualizar o nome da restrição:
SELECT NAME [Constraint name],
parent_object_id [Table Name],
type_desc [Object Type],
definition [Constraint Definition]
FROM sys.default_constraints
Saída
O SQL Server criou uma restrição com o nome gerado pelo sistema.
Adicionando uma restrição DEFAULT na tabela existente
Para adicionar uma restrição em uma coluna existente da tabela, usamos o ALTER TABLE ADD CONSTRAINT demonstração:
ALTER TABLE [tbl_name]
ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]
Na sintaxe,
- tbl_name :especifique o nome da tabela onde você deseja adicionar a restrição padrão.
- constraint_name :especifique o nome da restrição desejada.
- column_name: especifique o nome da coluna onde você deseja criar a restrição padrão.
- valor_padrão: especifique o valor que você deseja inserir – um inteiro, caractere ou string de caracteres.
Quando não especificamos o valor do column_name na instrução INSERT, ele insere o valor especificado no default_value parâmetro.
Primeiro, vamos adicionar o Product_name coluna em Detalhes de vendas :
ALTER TABLE salesdetails
ADD product_name VARCHAR(500)
Inserimos os dados na tabela sem especificar o valor da coluna Product_name. A consulta deve inserir N/A .
Para fazer isso, estou criando uma restrição padrão chamada DF_SalesDetails_ProductName no Nome_do_produto coluna. A consulta a seguir cria uma restrição padrão:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'N/A' FOR product_name
Agora, vamos observar o comportamento da restrição. Insira um registro sem especificar o nome do produto:
INSERT INTO salesdetails
(product_code,
product_name,
sale_qty)
VALUES ('PROD0002',
'Dell Optiplex 7080',
20)
INSERT INTO salesdetails
(product_code,
sale_qty)
VALUES ('PROD0003',
50)
Uma vez inserido o registro, execute a consulta SELECT para visualizar os dados:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Saída
Como você pode ver na imagem acima, o valor do Product_name coluna para PROD0003 é N/D .
Modificando a restrição DEFAULT usando scripts T-SQL
Podemos alterar a definição da restrição padrão:primeiro, elimine a restrição existente e, em seguida, crie a restrição com uma definição diferente.
Suponha que, em vez de inserir N/A , queremos inserir Não aplicável . Primeiro, devemos eliminar o DF_SalesDetails_ProductName limitação. Execute a seguinte consulta:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT df_salesdetails_productname
Quando a restrição for eliminada, execute a consulta para criar a restrição:
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'Not Applicable' FOR
product_name
Agora, vamos inserir um registro sem especificar o nome do produto:
INSERT INTO salesdetails
(product_code,
sale_qty)
VALUES ('PROD0004',
10)
Execute a instrução SELECT para visualizar os dados de SalesDetails tabela:
USE demodatabase
go
SELECT *
FROM salesdetails
go
Saída
Como você pode ver, o valor do Product_name coluna não é aplicável.
Visualizando a restrição DEFAULT usando SSMS
Podemos visualizar a lista da restrição DEFAULT usando o SQL Server Management Studio e consultando as visualizações de gerenciamento dinâmico.
Abra o SSMS e expanda Bancos de dados > Banco de dados de demonstração > Detalhes de vendas > Restrição :
Você pode ver as duas restrições chamadas DF_SalesDetails_SaleQty e DF_SalesDetails_ProductName criado.
Outra maneira de visualizar as restrições consultando sys.default_constraints . A consulta a seguir preenche a lista de restrições padrão e suas definições:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Saída
Podemos usar a sp_helpconstraint procedimento armazenado para visualizar a lista de restrições criadas na tabela:
EXEC Sp_helpconstraint 'SalesDetails'
Saída
As constraint_keys coluna mostra a definição de restrição padrão.
Eliminar a restrição
Podemos eliminar uma restrição de várias maneiras. Podemos fazer isso usando qualquer um dos seguintes métodos:
- Instrução ALTER TABLE DROP CONSTRAINT.
- Instrução DROP DEFAULT.
Eliminar uma restrição usando o comando ALTER TABLE DROP CONSTRAINT
Para eliminar a restrição, podemos usar a ALTER TABLE DROP CONSTRAINT comando. A sintaxe é a seguinte:
Alter table [tbl_name] drop constraint [constraint_name]
Na sintaxe,
- tbl_name: especifique o nome da tabela que tem uma coluna com restrição padrão.
- constraint_name: especifique o nome da restrição que você deseja eliminar.
Suponha que queremos eliminar o DF_SalesDetails_SaleQty restrição de Detalhes de vendas tabela. Execute a consulta:
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT [DF_SalesDetails_SaleQty]
Execute a consulta abaixo para verificar se a restrição foi eliminada:
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Saída
A restrição foi eliminada.
Remova a restrição DEFAULT usando a instrução DROP DEFAULT
Agora, vamos entender como podemos remover a restrição padrão usando o DROP DEFAULT demonstração. A sintaxe do DROP DEFAULT declaração é a seguinte:
DROP DEFAULT [constraint_name]
- constraint_name: especifique o nome da restrição que você deseja eliminar.
Para eliminar a restrição usando o DROP DEFAULT instrução, execute a seguinte consulta:
IF EXISTS (SELECT NAME
FROM sys.objects
WHERE NAME = 'DF_SalesDetails_ProductName'
AND type = 'D')
DROP DEFAULT [DF_SalesDetails_ProductName];
Resumo
Assim, examinamos vários aspectos essenciais do trabalho com as restrições padrão. Aprendemos como criar uma restrição padrão ao criar uma nova tabela ou adicionar uma restrição padrão em uma coluna existente da tabela.
Além disso, exploramos os casos de modificação da definição de restrição padrão, visualizando os detalhes das restrições padrão usando diferentes meios e eliminando a restrição padrão.
Esperamos que essas informações e os exemplos práticos que examinamos sejam úteis em seu trabalho.
Leia também
SQL INSERT INTO SELECT:5 maneiras fáceis de lidar com duplicatas