sql >> Databáze >  >> RDS >> Sqlserver

Vraťte seznam vypočítaných sloupců na serveru SQL Server

V SQL Server existuje několik pohledů systémového katalogu, které vám umožňují získat seznam vypočítaných sloupců v databázi.

Jedno z těchto zobrazení se nazývá sys.computed_columns . Druhým je sys.columns .

Zobrazení sys.computed_columns

sys.computed_columns pohled systémového katalogu obsahuje jeden řádek pro každý vypočítaný sloupec v databázi. Proto můžete spustit jednoduchý dotaz a získat seznam vypočítaných sloupců.

SELECT 
  OBJECT_NAME(object_id) AS [Parent],
  name AS [Computed Column],
  definition,
  is_persisted
FROM sys.computed_columns;

Výsledek:

+----------+-------------------+--------------------------------------+----------------+
| Parent   | Computed Column   | definition                           | is_persisted   |
|----------+-------------------+--------------------------------------+----------------|
| Person   | FullName          | (concat([FirstName],' ',[LastName])) | 0              |
| Products | TotalValue        | ([Quantity]*[Price])                 | 1              |
+----------+-------------------+--------------------------------------+----------------+

Většina sloupců tohoto zobrazení je zděděna z sys.columns Pohled. Zahrnul jsem sem jen hrstku.

Jedna z výhod tohoto zobrazení oproti sys.columns , je to, že vrací definici vypočítaného sloupce, což může být užitečné v závislosti na situaci. Zahrnuje také is_persisted příznak, který vám řekne, zda je vypočítaný sloupec zachován. Pokud je sloupec trvalý, vypočítaná hodnota sloupce se fyzicky uloží do tabulky. Pokud ne, vypočítá se v době, kdy se dotazujete na sloupec.

Zobrazení sys.columns

Můžete také spustit dotaz proti sys.columns vrátit vypočítané sloupce. Pokud to uděláte, budete muset filtrovat výsledky tak, aby zahrnovaly pouze vypočítané sloupce. Můžete to udělat pomocí WHERE klauzule na is_computed sloupec.

Příklad:

SELECT 
  OBJECT_NAME(object_id) as Parent,
  name AS [Computed Column]
FROM sys.columns
WHERE is_computed = 1;

Výsledek:

+----------+-------------------+
| Parent   | Computed Column   |
|----------+-------------------|
| Person   | FullName          |
| Products | TotalValue        |
+----------+-------------------+

Toto zobrazení neobsahuje definition , is_persisted nebo uses_database_collation sloupce, které sys.computed_columns obsahuje.


  1. Spustit uloženou proceduru s parametrem Output?

  2. Jak rychlé je ODBC? "Nabité" srovnání.

  3. Způsob, jak extrahovat data hodnoty DateTime bez sekund

  4. mysql_num_rows():zadaný argument není platným zdrojem výsledků MySQL