Este artículo presenta tres formas de usar T-SQL para averiguar si una columna es una columna calculada en SQL Server.
Esto es para cuando conoce el nombre de la columna, pero no sabe si es una columna calculada o no.
Función PROPIEDAD DE LA COLUMNA()
La COLUMNPROPERTY()
La función devuelve información sobre una columna dada.
Una de las propiedades aceptadas como argumento por esta función se llama IsComputed
. Obtendrá un 1 si se calcula la columna y un 0 si no lo es.
SELECT COLUMNPROPERTY( OBJECT_ID('dbo.Products'), 'TotalValue', 'IsComputed') AS [Computed Column?];
Resultado:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
En este caso, verifiqué si TotalValue
columna es una columna calculada y el resultado es 1
, lo que significa que es una columna calculada.
La vista de catálogo del sistema sys.computed_columns
El sys.computed_columns
La vista de catálogo del sistema contiene una fila para cada columna calculada en la base de datos. Por lo tanto, puede consultar esta vista para ver si su columna está calculada.
SELECT is_computed AS [Computed Column?] FROM sys.computed_columns WHERE name = 'TotalValue';
Resultado:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
También puede usar esta vista si solo conoce el nombre de la tabla. Si no sabe el nombre de la columna, pero simplemente está tratando de averiguar si la tabla contiene una columna calculada, podría hacer algo como esto:
SELECT name AS [Computed Column] FROM sys.computed_columns WHERE object_id = OBJECT_ID('dbo.Products');
Resultado:
+-------------------+ | Computed Column | |-------------------| | TotalValue | +-------------------+
En este caso, sabía que el nombre de la tabla era Products
, así que usé OBJECT_ID()
para obtener su ID y hacer coincidir eso con el object_id
columna (que es el ID del objeto al que pertenece la columna).
En estos ejemplos, solo devuelvo una columna. Como con cualquier vista, puede devolver tantas columnas como desee. Una de las columnas de esta vista contiene la definición de la columna calculada. Aquí hay una consulta que devuelve todas las columnas.
SELECT * FROM sys.computed_columns WHERE name = 'TotalValue';
Resultado (usando salida vertical):
object_id | 814625945 name | TotalValue column_id | 5 system_type_id | 60 user_type_id | 60 max_length | 8 precision | 19 scale | 4 collation_name | NULL is_nullable | 1 is_ansi_padded | 0 is_rowguidcol | 0 is_identity | 0 is_filestream | 0 is_replicated | 0 is_non_sql_subscribed | 0 is_merge_published | 0 is_dts_replicated | 0 is_xml_document | 0 xml_collection_id | 0 default_object_id | 0 rule_object_id | 0 definition | ([Quantity]*[Price]) uses_database_collation | 1 is_persisted | 1 is_computed | 1 is_sparse | 0 is_column_set | 0 generated_always_type | 0 generated_always_type_desc | NOT_APPLICABLE encryption_type | NULL encryption_type_desc | NULL encryption_algorithm_name | NULL column_encryption_key_id | NULL column_encryption_key_database_name | NULL is_hidden | 0 is_masked | 0 graph_type | NULL graph_type_desc | NULL
La vista de catálogo del sistema sys.columns
El sys.computed_columns
la vista en realidad hereda su is_computed
columna (y un montón de otras columnas) de sys.columns
. Por lo tanto, también puede usar sys.columns
para comprobar si una columna es una columna calculada.
SELECT is_computed FROM sys.columns WHERE name = 'TotalValue';
Resultado:
+---------------+ | is_computed | |---------------| | 1 | +---------------+