Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak sprawdzić, czy wyliczona kolumna jest „utrwalona” w SQL Server?

Podczas tworzenia kolumny wyliczanej w programie SQL Server istnieje możliwość oznaczenia jej jako „utrwalonej”. Utrwalona kolumna wyliczana to taka, która jest fizycznie przechowywana w tabeli. Jeśli nie określisz, że jest utrwalany, wartość kolumny zostanie obliczona za każdym razem, gdy uruchomisz względem niej zapytanie.

Możesz zapytać o sys.computed_columns widok katalogu systemowego, aby dowiedzieć się, czy obliczona kolumna jest oznaczona jako utrwalona.

Przykład 1 – Sprawdzanie jednej obliczonej kolumny

Oto przykład, który uruchomiłem w moim środowisku testowym. W tym przypadku sprawdzam wyliczoną kolumnę o nazwie TotalValue .

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

Wynik:

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

W tym przypadku kolumna jest utrzymywał się.

Jeśli masz wiele kolumn obliczanych o tej samej nazwie, możesz również dodać nazwę tabeli do WHERE klauzula:

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

Przykład 2 – Zwróć wszystkie przeliczone kolumny

W tym przykładzie zwracam wszystkie obliczone kolumny wraz z ich is_persisted wartości.

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

Wynik:

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

Przykład 3 – Dołącz schemat

W tym przykładzie dołączam za pomocą sys.objects widok, aby uwzględnić schemat w wynikach.

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;

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego UDF jest o wiele wolniejszy niż podzapytanie?

  2. Porównanie dat zapisanych jako varchar

  3. Co to jest procedura składowana?

  4. Wywołanie procedury składowanej T-SQL przez ADO.NET powoduje wyjątek SqlTimeoutException

  5. Zmień domyślny format daty i godziny w pojedynczej bazie danych w SQL Server