Udostępnij za pośrednictwem


Określanie obliczonych kolumn w tabeli

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL database w usłudze Microsoft Fabric

Obliczona kolumna to kolumna wirtualna, która nie jest fizycznie przechowywana w tabeli, chyba że kolumna jest oznaczona PERSISTED. Obliczone wyrażenie kolumny może używać danych z innych kolumn, aby obliczyć wartość kolumny, do której należy. Wyrażenie dla obliczonej kolumny w programie SQL Server można określić przy użyciu programu SQL Server Management Studio (SSMS) lub Transact-SQL (T-SQL).

Ograniczenia

  • Nie można używać kolumny obliczeniowej jako definicji ograniczeń DEFAULT lub FOREIGN KEY ani z definicją ograniczenia NOT NULL. Jeśli jednak obliczona wartość kolumny jest definiowana przez wyrażenie deterministyczne, a typ danych wyniku jest dozwolony w kolumnach indeksu, obliczona kolumna może być używana jako kolumna klucza w indeksie lub jako część dowolnego ograniczenia PRIMARY KEY lub UNIQUE.

    Jeśli na przykład tabela zawiera kolumny całkowite a i b, obliczona kolumna zdefiniowana jako a + b może zostać zindeksowana, ale obliczona kolumna zdefiniowana jako a + DATEPART(dd, GETDATE()) nie może zostać zindeksowana, ponieważ wartość może ulec zmianie w kolejnych wywołaniach.

  • Obliczona kolumna nie może być celem instrukcji INSERT lub UPDATE.

  • SET QUOTED_IDENTIFIER musi być ON, gdy tworzysz lub zmieniasz indeksy w kolumnach obliczeniowych lub indeksowanych widokach. Aby uzyskać więcej informacji, zobacz SET QUOTED_IDENTIFIER (Transact-SQL).

Uprawnienia

Wymaga uprawnienia ALTER w tabeli.

Korzystanie z programu SQL Server Management Studio

Dodawanie nowej kolumny obliczeniowej

  1. W Eksplorator obiektówrozwiń tabelę, dla której chcesz dodać nową obliczoną kolumnę. Kliknij prawym przyciskiem myszy kolumny i wybierz pozycję Nowa kolumna.

  2. Wprowadź nazwę kolumny i zaakceptuj domyślny typ danych (nchar(10)). Aparat bazy danych określa typ danych obliczonej kolumny, stosując reguły pierwszeństwa typu danych do wyrażeń określonych w formule. Jeśli na przykład formuła odwołuje się do kolumny typu pieniądze i kolumny typu int, obliczona kolumna będzie typu pieniądze, ponieważ ten typ danych ma wyższy priorytet. Aby uzyskać więcej informacji, zobacz pierwszeństwo typu danych (Transact-SQL).

  3. Na karcie właściwości kolumny rozwiń właściwość Specyfikacja kolumny obliczeniowej.

  4. W (Formuła) właściwości podrzędnej wprowadź wyrażenie dla tej kolumny w komórce siatki po prawej stronie. Na przykład w kolumnie SalesTotal wprowadzona formuła może być SubTotal+TaxAmt+Freight, która dodaje wartość w tych kolumnach dla każdego wiersza w tabeli.

    Ważny

    Gdy formuła łączy dwa wyrażenia różnych typów danych, reguły pierwszeństwa typu danych określają, że typ danych o niższym pierwszeństwie jest konwertowany na typ danych o wyższym pierwszeństwie. Jeśli konwersja nie jest wspieraną konwersją niejawną, zostanie zwrócony błąd Error validating the formula for column column_name.. Użyj funkcji CAST lub CONVERT, aby rozwiązać konflikt typu danych. Jeśli na przykład kolumna typu nvarchar jest połączona z kolumną typu int, typ liczby całkowitej musi zostać przekonwertowany na nvarchar, jak pokazano w tej formule ('Prod'+CONVERT(nvarchar(23),ProductID)). Aby uzyskać więcej informacji, zobacz CAST i CONVERT (Transact-SQL).

  5. Określ, czy dane są utrwalane, wybierając opcję Tak lub Nie z listy rozwijanej dla właściwości podrzędnej Czy jest utrwalane.

  6. Na menu Plik wybierz pozycję Zapisznazwę tabeli.

Dodawanie definicji kolumny obliczeniowej do istniejącej kolumny

  1. W eksploratorze obiektów kliknij prawym przyciskiem myszy tabelę z kolumną, dla której chcesz zmienić i rozwiń folder kolumny.
  2. Kliknij prawym przyciskiem myszy kolumnę, dla której chcesz określić formułę kolumny obliczeniowej, a następnie wybierz pozycję Usuń. Wybierz pozycję OK.
  3. Dodaj nową kolumnę i określ obliczoną formułę kolumny, wykonując poprzednią procedurę, aby dodać nową obliczoną kolumnę.

Korzystanie z Transact-SQL

Dodawanie obliczonej kolumny podczas tworzenia tabeli

Poniższy przykład tworzy tabelę z obliczoną kolumną, która mnoży wartość w kolumnie QtyAvailable razy wartość w kolumnie UnitPrice.

CREATE TABLE dbo.Products
   (
      ProductID int IDENTITY (1,1) NOT NULL
      , QtyAvailable smallint
      , UnitPrice money
      , InventoryValue AS QtyAvailable * UnitPrice
    );

-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
   VALUES (25, 2.00), (10, 1.5);

-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;

-- Update values in the table.
UPDATE dbo.Products 
SET UnitPrice = 2.5
WHERE ProductID = 1;

-- Display the rows in the table, and the new values for UnitPrice and InventoryValue.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;

Dodawanie nowej kolumny obliczeniowej do istniejącej tabeli

Poniższy przykład dodaje nową kolumnę do tabeli utworzonej w poprzednim przykładzie.

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);

Opcjonalnie dodaj argument PERSISTED, aby fizycznie przechowywać obliczone wartości w tabeli:

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED;

Zmienianie istniejącej kolumny na obliczoną kolumnę

Poniższy przykład modyfikuje kolumnę dodaną w poprzednim przykładzie.

ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
GO