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

3 formas de averiguar si una columna es una columna calculada en SQL Server

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             |
+---------------+