Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Restrição SQL DEFAULT para inserir coluna com um valor padrão para a tabela do SQL Server


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