Según tengo entendido, las restricciones de valor predeterminado no forman parte del estándar ISO, por lo que no aparecen en INFORMATION_SCHEMA. INFORMATION_SCHEMA parece ser la mejor opción para este tipo de tarea porque es multiplataforma, pero si la información no está disponible, se deben usar las vistas de catálogo de objetos (sys. *) En lugar de las vistas de tabla del sistema, que están en desuso en SQL Server. 2005 y posteriores.
A continuación, se muestra más o menos lo mismo que la respuesta de @ user186476. Devuelve el nombre de la restricción de valor predeterminado para una columna determinada. (Para los usuarios que no son de SQL Server, necesita el nombre del predeterminado para eliminarlo, y si no nombra la restricción predeterminada usted mismo, SQL Server crea un nombre loco como "DF_TableN_Colum_95AFE4B5". Para facilitar el cambio su esquema en el futuro, ¡siempre nombre explícitamente sus restricciones!)
-- returns name of a column's default value constraint
SELECT
default_constraints.name
FROM
sys.all_columns
INNER JOIN
sys.tables
ON all_columns.object_id = tables.object_id
INNER JOIN
sys.schemas
ON tables.schema_id = schemas.schema_id
INNER JOIN
sys.default_constraints
ON all_columns.default_object_id = default_constraints.object_id
WHERE
schemas.name = 'dbo'
AND tables.name = 'tablename'
AND all_columns.name = 'columnname'
sys
sencilla , funciona en todas las versiones de SQL Server, no tiene tablas y es fácil de recordar.Puede utilizar lo siguiente para limitar los resultados aún más especificando el nombre de la tabla y el nombre de la columna con los que se correlaciona la restricción predeterminada:
fuente
Parece que no hay nombres de restricciones por defecto en las
Information_Schema
vistas.usar
SELECT * FROM sysobjects WHERE xtype = 'D' AND name = @name
para encontrar una restricción predeterminada por nombrefuente
El siguiente script enumera todas las restricciones predeterminadas y los valores predeterminados para las tablas de usuario en la base de datos en la que se está ejecutando:
fuente
Si desea obtener una restricción por los nombres de columna o tabla, o desea obtener todas las restricciones en la base de datos, busque otras respuestas. Sin embargo, si solo está buscando exactamente lo que pide la pregunta, es decir, "probar si existe una restricción predeterminada dada ... por el nombre de la restricción" , entonces hay una manera mucho más fácil.
Aquí hay una respuesta a prueba de futuro que no usa la
sysobjects
u otrassys
tablas en absoluto:fuente
fuente
¿Es la columna COLUMN_DEFAULT de INFORMATION_SCHEMA.COLUMNS lo que está buscando?
fuente
fuente
Nigromante.
Si solo necesita verificar si existe una restricción
predeterminada (las restricciones predeterminadas pueden tener un nombre diferente en las bases de datos mal administradas),
use INFORMATION_SCHEMA.COLUMNS (column_default):
Si desea verificar solo por el nombre de la restricción:
Y por último, pero no menos importante, puede crear una vista llamada
INFORMATION_SCHEMA.DEFAULT_CONSTRAINTS:
fuente
No creo que esté en INFORMATION_SCHEMA; probablemente tendrá que usar sysobjects o tablas / vistas obsoletas relacionadas.
Pensaría que habría un tipo para esto en INFORMATION_SCHEMA.TABLE_CONSTRAINTS, pero no veo ninguno.
fuente
Probablemente debido a que en algunos de los otros DBMS SQL la "restricción predeterminada" no es realmente una restricción, no encontrará su nombre en "INFORMATION_SCHEMA.TABLE_CONSTRAINTS", por lo que su mejor opción es "INFORMATION_SCHEMA.COLUMNS" como ya han mencionado otros.
(SQLServer-ignoramus aquí)
La única razón en la que puedo pensar cuando tienes que saber el nombre de la "restricción predeterminada" es si SQLServer no admite el
"ALTER TABLE xxx ALTER COLUMN yyy SET DEFAULT..."
comando. Pero entonces ya se encuentra en una zona no estándar y debe utilizar las formas específicas del producto para obtener lo que necesita.fuente
¿Qué tal usar una combinación de CHECK_CONSTRAINTS y CONSTRAINT_COLUMN_USAGE:
fuente
Estoy usando el siguiente script para recuperar todos los valores predeterminados (sp_binddefaults) y todas las restricciones predeterminadas con los siguientes scripts:
fuente
Vista del catálogo de objetos : sys.default_constraints
Las vistas del esquema de información
INFORMATION_SCHEMA
son compatibles con ANSI, pero las restricciones predeterminadas no forman parte del estándar ISO. Microsoft SQL Server proporciona vistas del catálogo del sistema para obtener información sobre los metadatos de los objetos de SQL Server.sys.default_constraints
vista del catálogo del sistema utilizada para obtener información sobre las restricciones predeterminadas.fuente