Określanie obliczonych kolumn w tabeli
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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
lubFOREIGN KEY
ani z definicją ograniczeniaNOT 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 ograniczeniaPRIMARY KEY
lubUNIQUE
.Jeśli na przykład tabela zawiera kolumny całkowite
a
ib
, obliczona kolumna zdefiniowana jakoa + b
może zostać zindeksowana, ale obliczona kolumna zdefiniowana jakoa + 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
W Eksplorator obiektówrozwiń tabelę, dla której chcesz dodać nową obliczoną kolumnę. Kliknij prawym przyciskiem myszy kolumny i wybierz pozycję Nowa kolumna.
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).
Na karcie właściwości kolumny rozwiń właściwość Specyfikacja kolumny obliczeniowej.
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 funkcjiCAST
lubCONVERT
, 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).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.
Na menu Plik wybierz pozycję Zapisznazwę tabeli.
Dodawanie definicji kolumny obliczeniowej do istniejącej kolumny
- W eksploratorze obiektów kliknij prawym przyciskiem myszy tabelę z kolumną, dla której chcesz zmienić i rozwiń folder kolumny.
- Kliknij prawym przyciskiem myszy kolumnę, dla której chcesz określić formułę kolumny obliczeniowej, a następnie wybierz pozycję Usuń. Wybierz pozycję OK.
- 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