Especificación de valores predeterminados para las columnas
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
Puede usar SQL Server Management Studio (SSMS) para especificar un valor predeterminado que se escribirá en la columna de tabla. Puede establecer un valor predeterminado mediante el Explorador de objetos o si ejecuta Transact-SQL.
Si no asigna un valor predeterminado a la columna y el usuario deja la columna en blanco, entonces:
Si ha establecido la opción de permitir valores NULL, se insertará
NULL
en la columna.Si no establece la opción para permitir valores NULL, la columna permanece en blanco, pero el usuario o la aplicación no pueden insertar la fila hasta que proporcionen un valor para la columna.
Puede usar una restricción predeterminada para varias tareas para garantizar la coherencia de los datos de nivel de base de datos:
- Establezca el valor de fila de una columna "active" o "enable" en
1
tras la inserción. - Establezca el valor de fila de un campo de fecha en la fecha actual.
- Establezca el valor de fila de un campo en una función del sistema determinista, por ejemplo,
DB_NAME()
.
Limitaciones
Antes de comenzar, tenga en cuenta las siguientes limitaciones y restricciones:
Si la entrada del campo Valor predeterminado reemplaza un valor predeterminado enlazado (que se muestra sin paréntesis), se le preguntará si quiere desenlazar el valor predeterminado y sustituirlo por el nuevo.
Para escribir una cadena de texto, escriba el valor entre comillas simples (
'
). No use comillas dobles ("
), ya que están reservadas para identificadores entre comillas.Para especificar un valor predeterminado numérico, escriba el número sin comillas.
Para especificar un objeto o función, escriba el nombre del objeto o función sin comillas.
En Azure Synapse Analytics, solo se pueden usar constantes para una restricción predeterminada. No se puede usar una expresión con una restricción predeterminada.
Permisos
Para las acciones descritas en este artículo se necesita el permiso ALTER
en la tabla.
Uso de SQL Server Management Studio para especificar un valor predeterminado
Puede usar el Explorador de objetos en SSMS para especificar un valor predeterminado de una columna de tabla. Para ello, siga los pasos que se indican a continuación:
Conéctese a su instancia de SQL Server usando SSMS.
En el Explorador de objetos, haga clic con el botón derecho en la tabla que contenga las columnas de las que quiera cambiar la escala y, después, seleccione Diseño.
Seleccione la columna para la que desea especificar un valor predeterminado.
En la pestaña Propiedades de columna , escriba el nuevo valor predeterminado en la propiedad Valor o enlace predeterminado .
Para especificar un valor predeterminado numérico, escriba el número. Para un objeto o función, escriba su nombre. Para un valor predeterminado alfanumérico, escriba el valor entre comillas simples.
En el menú Archivo, seleccione Guardar <nombre de tabla>.
Usar Transact-SQL para especificar un valor predeterminado
Existen diversas formas en que puede especificar un valor predeterminado de una columna, mediante T-SQL. En cada uno de los ejemplos siguientes, puede abrir una nueva consulta de Transact-SQL con estos pasos.
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.
En la barra Estándar, seleccione Nueva consulta.
Copie y pegue el ejemplo en la ventana de consulta y seleccione Ejecutar.
Uso de una restricción con nombre
Al trabajar con proyectos de base de datos, se recomienda crear restricciones con nombres. De lo contrario, la restricción predeterminada recibe un nombre generado por el sistema, que variará en cada entorno de SQL Server en el que se creen los objetos de base de datos.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);
Use ALTER TABLE
Puede agregar una restricción con nombre a una tabla existente con ALTER TABLE
.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT
); -- Allows nulls.
GO
INSERT INTO dbo.doc_exz (column_a)
VALUES (7);
GO
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50 FOR column_b;
GO
Use CREATE TABLE
Puede crear una nueva tabla con restricciones predeterminadas con CREATE TABLE
.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);
Establecer una fecha de creación
En el ejemplo siguiente se usa la función del sistema sysdatetimeoffset()
para rellenar el valor de fila de la columna dateinserted
con la fecha en que se creó la fila.
CREATE TABLE dbo.test (
id INT identity(1, 1) NOT NULL CONSTRAINT PK_test PRIMARY KEY
,date_inserted DATETIMEOFFSET(2) NOT NULL CONSTRAINT DF_test_date_inserted DEFAULT(sysdatetimeoffset())
);
Una restricción predeterminada no cambia cuando se actualiza la fila. Para actualizar un valor cada vez que se modifica la fila, considere la posibilidad de usar un desencadenador de , una tabla temporal , una columna calculada o una cadena binaria rowversion. Considere también la posibilidad de insertar filas ejecutando procedimientos almacenados en lugar de insertar filas directamente, donde los procedimientos almacenados pueden aplicar lógica de negocios, valores predeterminados y otras reglas de coherencia de datos.
Para detectar filas que cambian, considere la posibilidad de Capturar datos modificados (CDC), Cambiar el seguimiento, una tabla temporalo una tabla Ledger.