Como obtener el valor default de una columna en SQL Server usando T-SQL
Hoy alguien de mi equipo de trabajo me preguntó como se podía comparar los valores de una columna para cada row contra el valor default de esa columna.
Después de probar un rato en el Management Studio, aprendí que se puede utilizar las vistas de INFORMATION_SCHEMA para obtener información de metadata sobre objetos en SQL Server.
Solo para aclarar…esto seguramente se puede hacer usando la tabla sysobjects de SQL Server, pero quería hacerlo de una manera más legible.
El query para obtener el valor default de una columna de alguna tabla es:
SELECT COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Vendedor' AND COLUMN_NAME = 'CodigoPais'
Un dato muy importante es que estas vistas (INFORMATION_SCHEMA) se crearon para apegarse al estándar SQL-92, con el objetivo de proveer meta-datos sobre los objetos de la base de datos.
Me dió gusto el haber investigado otra alternativa a sysobjects, porque esta investigación me hizo darme cuenta que el realizar mis queries para obtener meta-data usando INFORMATION_SCHEMA en lugar de SYSOBJECTS hace que mis queries sean portables, en lugar de estar limitados a SQL Server solamente, o incluso considerando también el escenario en que Microsoft decidiera cambiar la estructura de SYSOBJECTS de alguna manera que afectara mis queries.
Hay varias vistas de INFORMATION_SCHEMA. Para este escenario solo usé la de Columns, pero hay más, por ejemplo:
- CHECK_CONSTRAINTS
- REFERENTIAL_CONSTRAINTS
- COLUMN_DOMAIN_USAGE
- ROUTINES
- COLUMN_PRIVILEGES
- ROUTINE_COLUMNS
- COLUMNS
- SCHEMATA
- CONSTRAINT_COLUMN_USAGE
- TABLE_CONSTRAINTS
- CONSTRAINT_TABLE_USAGE
- TABLE_PRIVILEGES
- DOMAIN_CONSTRAINTS
- TABLES
- DOMAINS
- VIEW_COLUMN_USAGE
- KEY_COLUMN_USAGE
- VIEW_TABLE_USAGE
- PARAMETERS
- VIEWS
Les dejo la siguiente liga a un artículo del SQL Server Development Center de Microsoft, donde explican más detalles de las vistas de INFORMATION_SCHEMA, y a otro artículo que da información general referente a estas.