sql >> Base de Datos >  >> RDS >> Sqlserver

Restricción DEFAULT de SQL para insertar una columna con un valor predeterminado en la tabla de SQL Server

Para insertar datos en una tabla que tiene columnas con restricciones predeterminadas, podemos usar la restricción DEFAULT para un valor predeterminado en una tabla. Este artículo cubrirá los siguientes aspectos:

  • La restricción DEFAULT y el permiso requerido para crearlos.
  • Agregar una restricción DEFAULT al crear una nueva tabla.
  • Agregar una restricción DEFAULT en una tabla existente.
  • Modificación y visualización de la definición de restricción mediante scripts T-SQL y SSMS.

¿Qué es la RESTRICCIÓN POR DEFECTO en SQL Server?

Una restricción predeterminada especifica el valor predeterminado para la columna.

Cuando ejecutamos la instrucción INSERT pero no especificamos ningún valor para la columna con la restricción predeterminada creada, SQL Server inserta el valor predeterminado especificado en la definición de la restricción DEFAULT.

Para crear una restricción predeterminada, necesita los permisos ALTER TABLE y CREATE TABLE.

Agregar una restricción DEFAULT al crear una nueva tabla

Hay una tabla llamada SalesDetails . Cuando insertamos datos en la tabla sin especificar el Sale_Qty valor de la columna, la consulta debe insertar cero. Para hacer eso, estoy creando una restricción predeterminada llamada DF_SalesDetails_SaleQty en el Sale_Qty columna.

USE demodatabase 
go 
CREATE TABLE salesdetails 
  ( 
     id           INT IDENTITY (1, 1), 
     product_code VARCHAR(10), 
     sale_qty     INT CONSTRAINT df_salesdetails_saleqty DEFAULT 0 
  ) 

Ahora, probemos el comportamiento de la restricción insertando algunos registros ficticios en ella. Ejecute la siguiente consulta:

INSERT INTO salesdetails 
            (product_code) 
VALUES     ('PROD0001')

Utilice la siguiente consulta para ver los datos de la tabla:

INSERT INTO salesdetails 
            (product_code) 
VALUES     ('PROD0001')

Salida

Como puede ver, el cero se ha insertado en Sale_Qty columna.

Al crear una tabla, no especificamos el nombre de la restricción DEFAULT. SQL Server crea una restricción con un nombre único generado por el sistema.

Cree la tabla usando la siguiente consulta:

USE demodatabase 
go 
CREATE TABLE salesdetails 
  ( 
     id           INT IDENTITY (1, 1), 
     product_code VARCHAR(10), 
     sale_qty     INT DEFAULT 0 
  )

Ejecute el siguiente script para ver el nombre de la restricción:

SELECT NAME             [Constraint name], 
       parent_object_id [Table Name], 
       type_desc        [Object Type], 
       definition       [Constraint Definition] 
FROM   sys.default_constraints 

Salida

SQL Server ha creado una restricción con el nombre generado por el sistema.

Agregar una restricción DEFAULT en la tabla existente

Para agregar una restricción en una columna existente de la tabla, usamos ALTER TABLE ADD CONSTRAINT declaración:

ALTER TABLE [tbl_name] 
  ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]

En la sintaxis,

  • nombre_tbl :especifique el nombre de la tabla donde desea agregar la restricción predeterminada.
  • nombre_restricción :especifique el nombre de restricción deseado.
  • nombre_columna: especifique el nombre de la columna en la que desea crear la restricción predeterminada.
  • valor_predeterminado: especifique el valor que desea insertar:un número entero, un carácter o una cadena de caracteres.

Cuando no especificamos el valor de column_name en la instrucción INSERT, inserta el valor especificado en default_value parámetro.

Primero, agreguemos el Product_name columna en Detalles de ventas :

ALTER TABLE salesdetails 
  ADD product_name VARCHAR(500) 

Insertamos los datos en la tabla sin especificar el valor de la columna Product_name. La consulta debe insertar N/A .

Para hacer eso, estoy creando una restricción predeterminada llamada DF_SalesDetails_ProductName en Product_name columna. La siguiente consulta crea una restricción predeterminada:

ALTER TABLE dbo.salesdetails 
  ADD CONSTRAINT df_salesdetails_productname DEFAULT 'N/A' FOR product_name 

Ahora, observemos el comportamiento de la restricción. Inserte un registro sin especificar el nombre del producto:

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)

Una vez insertado el registro, ejecute la consulta SELECT para ver los datos:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Salida

Como puede ver en la imagen de arriba, el valor de Product_name columna para PROD0003 es N/A .

Modificación de la restricción DEFAULT mediante secuencias de comandos T-SQL

Podemos cambiar la definición de la restricción predeterminada:primero, elimine la restricción existente y luego cree la restricción con una definición diferente.

Supongamos que, en lugar de insertar N/A , queremos insertar No aplicable . Primero, debemos soltar el DF_SalesDetails_ProductName restricción. Ejecute la siguiente consulta:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT df_salesdetails_productname

Cuando se elimine la restricción, ejecute la consulta para crear la restricción:

ALTER TABLE dbo.salesdetails 
  ADD CONSTRAINT df_salesdetails_productname DEFAULT 'Not Applicable' FOR 
  product_name 

Ahora, insertemos un registro sin especificar el nombre del producto:

INSERT INTO salesdetails 
            (product_code, 
             sale_qty) 
VALUES     ('PROD0004', 
            10)

Ejecute la instrucción SELECT para ver los datos de SalesDetails tabla:

USE demodatabase 
go 
SELECT * 
FROM   salesdetails 
go

Salida

Como puede ver, el valor de Product_name la columna no es aplicable.

Ver la restricción DEFAULT usando SSMS

Podemos ver la lista de la restricción DEFAULT usando SQL Server Management Studio y consultando las vistas de administración dinámica.

Abra SSMS y expanda Bases de datos > Base de datos de demostración > Detalles de ventas > Restricción :

Puede ver las dos restricciones denominadas DF_SalesDetails_SaleQty y DF_SalesDetails_ProductName creado.

Otra forma de ver las restricciones consultando sys.default_constraints . La siguiente consulta completa la lista de restricciones predeterminadas y sus definiciones:

SELECT NAME                  [Constraint name], 
       Object_name(parent_object_id)[Table Name], 
       type_desc             [Consrtaint Type], 
       definition            [Constraint Definition] 
FROM   sys.default_constraints

Salida

Podemos usar la sp_helpconstraint procedimiento almacenado para ver la lista de restricciones creadas en la tabla:

EXEC Sp_helpconstraint 'SalesDetails'

Salida

Las claves_de_restricción columna muestra la definición de restricción predeterminada.

Eliminación de la restricción

Podemos eliminar una restricción de varias maneras. Podemos hacerlo usando cualquiera de los siguientes métodos:

  • Declaración ALTER TABLE DROP CONSTRAINT.
  • Declaración DROP DEFAULT.

Eliminar una restricción con el comando ALTER TABLE DROP CONSTRAINT

Para descartar la restricción, podemos usar ALTER TABLE DROP CONSTRAINT dominio. La sintaxis es la siguiente:

Alter table [tbl_name] drop constraint [constraint_name]

En la sintaxis,

  • nombre_tbl: especifique el nombre de la tabla que tiene una columna con restricción predeterminada.
  • nombre_restricción: especifique el nombre de la restricción que desea descartar.

Supongamos que queremos eliminar el DF_SalesDetails_SaleQty restricción de SalesDetails mesa. Ejecute la consulta:

ALTER TABLE dbo.salesdetails 
  DROP CONSTRAINT [DF_SalesDetails_SaleQty] 

Ejecute la siguiente consulta para verificar que se eliminó la restricción:

SELECT NAME                  [Constraint name], 
       Object_name(parent_object_id)[Table Name], 
       type_desc             [Consrtaint Type], 
       definition            [Constraint Definition] 
FROM   sys.default_constraints

Salida

La restricción se ha eliminado.

Elimine la restricción DEFAULT utilizando la instrucción DROP DEFAULT

Ahora, comprendamos cómo podemos eliminar la restricción predeterminada usando DROP DEFAULT declaración. La sintaxis de DROP DEFAULT declaración es la siguiente:

DROP DEFAULT [constraint_name]
  • nombre_restricción: especifique el nombre de la restricción que desea descartar.

Para eliminar la restricción mediante DROP DEFAULT declaración, ejecute la siguiente consulta:

IF EXISTS (SELECT NAME 
           FROM   sys.objects 
           WHERE  NAME = 'DF_SalesDetails_ProductName' 
                  AND type = 'D') 
DROP DEFAULT [DF_SalesDetails_ProductName]; 

Resumen

Por lo tanto, hemos examinado varios aspectos esenciales del trabajo con las restricciones predeterminadas. Hemos aprendido cómo crear una restricción predeterminada al crear una nueva tabla o agregar una restricción predeterminada en una columna existente de la tabla.

Además, hemos explorado los casos de modificar la definición de restricción predeterminada, ver los detalles de las restricciones predeterminadas usando diferentes medios y descartar la restricción predeterminada.

Esperamos que esta información y los ejemplos prácticos que hemos examinado sean útiles en su trabajo.

Leer también

SQL INSERT INTO SELECT:5 formas fáciles de manejar duplicados