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

¿Cómo encuentro una restricción por defecto usando INFORMACION_ESQUEMA?

Según tengo entendido, las restricciones de valores predeterminados no forman parte del estándar ISO, por lo que no aparecen en INFORMACION_ESQUEMA. INFORMACIÓN_ESQUEMA 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 es 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 predeterminado para soltarlo, y si no nombra la restricción predeterminada usted mismo, SQL Server crea un nombre loco como "DF_TableN_Colum_95AFE4B5". Para que sea más fácil de cambiar 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'