Megosztás a következőn keresztül:


Számított oszlopok megadása egy táblában

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A számított oszlop olyan virtuális oszlop, amely nem fizikailag van tárolva a táblában, kivéve, ha az oszlop PERSISTEDvan megjelölve. A számított oszlopkifejezések más oszlopok adataival kiszámíthatják annak az oszlopnak az értékét, amelyhez tartozik. Az SQL Serverben egy számítási oszlop kifejezését az SQL Server Management Studio (SSMS) vagy a Transact-SQL (T-SQL) használatával adhatja meg.

Limitations

  • A számított oszlop nem használható DEFAULT vagy FOREIGN KEY kényszerdefinícióként vagy NOT NULL kényszerdefinícióval. Ha azonban a számított oszlop értékét determinisztikus kifejezés határozza meg, és az eredmény adattípusa engedélyezett az indexoszlopokban, a számított oszlop használható kulcsoszlopként egy indexben, vagy bármely PRIMARY KEY vagy UNIQUE kényszer részeként.

    Ha például a tábla egész számokat a és btartalmaz, akkor a a + b ként definiált számított oszlop indexelhető, de a a + DATEPART(dd, GETDATE()) definiált számított oszlop nem indexelhető, mert az érték a későbbi meghívásokban változhat.

  • A számított oszlop nem lehet az INSERT vagy AZ UPDATE utasítás célja.

  • SET QUOTED_IDENTIFIER-nak ON-nek kell lennie, amikor indexeket hoz létre vagy módosít számított oszlopokon vagy indexelt nézeteken. További információ: SET QUOTED_IDENTIFIER (Transact-SQL).

Permissions

A táblához ALTER jogosultság szükséges.

Az SQL Server Management Studio használata

Új számított oszlop hozzáadása

  1. Az Object Explorerterületen bontsa ki azt a táblát, amelyhez hozzá szeretné adni az új számított oszlopot. Kattintson a jobb gombbal Oszlopok elemre, és válassza Új oszloplehetőséget.

  2. Adja meg az oszlop nevét, és fogadja el az alapértelmezett adattípust (nchar(10)). Az adatbázismotor úgy határozza meg a számított oszlop adattípusát, hogy az adattípus-elsőbbségi szabályokat alkalmazza a képletben megadott kifejezésekre. Ha például a képlet egy pénz típusú oszlopra és egy inttípusú oszlopra hivatkozik, akkor a számított oszlop pénz lesz, mert az adattípus elsőbbsége magasabb. További információ: Adattípus elsőbbsége (Transact-SQL).

  3. Az Oszlop tulajdonságai lapon bontsa ki a Számított oszlop specifikációja tulajdonságot.

  4. Az (Képlet) al-tulajdonságban adja meg ennek az oszlopnak a kifejezését a jobb oldali cellában. Egy SalesTotal oszlopban például a beírt képlet lehet SubTotal+TaxAmt+Freight, amely hozzáadja az oszlopban lévő értéket a táblázat minden sorához.

    Important

    Ha egy képlet két különböző adattípusú kifejezést egyesít, az adattípus-elsőbbséget szolgáló szabályok azt határozzák meg, hogy az alacsonyabb elsőbbséget élvező adattípust a rendszer a magasabb elsőbbséget élvező adattípussá konvertálja. Ha az átalakítás nem egy támogatott implicit konverzió, visszaadja a Error validating the formula for column column_name. hibát. Az adattípus-ütközés feloldásához használja a CAST vagy CONVERT függvényt. Ha például egy nvarchar típusú oszlopot egy inttípusú oszloppal kombinálják, akkor az egész számtípust nvarchar típussá kell konvertálni, ahogy az ebben a képletben ('Prod'+CONVERT(nvarchar(23),ProductID))látható. További információ: CAST és CONVERT (Transact-SQL).

  5. Jelölje meg, hogy az adatok megmaradnak-e, úgy, hogy a Igen vagy a Nem választja ki a Is Persisted al tulajdonság legördülő listájából.

  6. A Fájl menüben válassza a Mentéstáblanévlehetőséget.

Számított oszlopdefiníció hozzáadása meglévő oszlophoz

  1. Az Object Exploreralkalmazásban kattintson a jobb gombbal arra a táblára, amelynek oszlopát módosítani szeretné, és bontsa ki a Oszlopok mappát.
  2. Kattintson a jobb gombbal arra az oszlopra, amelyhez számított oszlopképletet szeretne megadni, és válassza a Törléslehetőséget. Kattintson az OK gombra.
  3. Adjon hozzá egy új oszlopot, és adja meg a számított oszlop képletét az előző eljárás követésével egy új számított oszlop hozzáadásához.

Használd a Transact-SQL-t

Számított oszlop hozzáadása tábla létrehozásakor

Az alábbi példa egy számított oszlopot tartalmazó táblát hoz létre, amely megszorozza a QtyAvailable oszlopban lévő értéket az UnitPrice oszlopban lévő értékkel.

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;

Új számított oszlop hozzáadása meglévő táblához

Az alábbi példa egy új oszlopot ad hozzá az előző példában létrehozott táblához.

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

Ha szeretné, adja hozzá a PERSISTED argumentumot a számított értékek fizikai tárolásához a táblában:

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

Meglévő oszlop módosítása számított oszlopra

Az alábbi példa módosítja az előző példában hozzáadott oszlopot.

ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO

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