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

Jak zkontrolovat, zda je vypočítaný sloupec „trvalý“ na serveru SQL Server

Když vytvoříte vypočítaný sloupec na serveru SQL Server, máte možnost jej označit jako „trvalý“. Trvalý vypočítaný sloupec je ten, který je fyzicky uložen v tabulce. Pokud neurčíte, že je trvalý, pak se hodnota sloupce vypočítá pokaždé, když na něj spustíte dotaz.

Můžete se zeptat na sys.computed_columns zobrazení systémového katalogu, abyste zjistili, zda je vypočítaný sloupec označen jako trvalý.

Příklad 1 – Kontrola jednoho vypočítaného sloupce

Zde je příklad, který jsem spustil ve svém testovacím prostředí. V tomto případě kontrolujem vypočítaný sloupec s názvem TotalValue .

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue';

Výsledek:

+----------------+
| is_persisted   |
|----------------|
| 1              |
+----------------+

V tomto případě sloupec je přetrvával.

V případě, že máte více počítaných sloupců se stejným názvem, můžete také přidat název tabulky do WHERE klauzule:

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue'
AND OBJECT_NAME(object_id) = 'Products';

Příklad 2 – Vrátit všechny vypočítané sloupce

V tomto příkladu vrátím všechny vypočítané sloupce spolu s jejich is_persisted hodnoty.

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

Výsledek:

+----------+-------------------+----------------+
| Table    | Computed Column   | is_persisted   |
|----------+-------------------+----------------|
| Person   | FullName          | 0              |
| Products | TotalValue        | 1              |
+----------+-------------------+----------------+

Příklad 3 – Zahrnout schéma

V tomto příkladu se připojím k sys.objects zobrazení zahrnout schéma do výsledků.

SELECT 
  SCHEMA_NAME(o.schema_id) AS [Schema],
  OBJECT_NAME(cc.object_id) AS [Table],
  cc.name AS [Computed Column],
  cc.is_persisted
FROM sys.computed_columns cc
INNER JOIN sys.objects o
ON o.object_id = cc.object_id;

Výsledek:

+----------+----------+-------------------+----------------+
| Schema   | Table    | Computed Column   | is_persisted   |
|----------+----------+-------------------+----------------|
| dbo      | Person   | FullName          | 0              |
| dbo      | Products | TotalValue        | 1              |
+----------+----------+-------------------+----------------+

  1. Aktualizace dat Salesforce pomocí kurzoru SQL Server

  2. Úvod do typů grafů

  3. Mám navrhnout tabulku s primárním klíčem varchar nebo int?

  4. Asynchronní I/O intenzivní kód běží pomaleji než neasynchronní, proč?