Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Berechnete Spalten werden in speicheroptimierten Tabellen nicht unterstützt. Sie können jedoch eine berechnete Spalte simulieren.
Sie sollten berücksichtigen, dass Ihre berechneten Spalten beibehalten werden müssen, wenn Sie Ihre datenträgerbasierten Tabellen in speicheroptimierte Tabellen migrieren. Die unterschiedlichen Leistungsmerkmale von speicheroptimierten Tabellen und nativ kompilierten gespeicherten Prozeduren können die Notwendigkeit der Persistenz beeinträchtigen.
Nicht persistente berechnete Spalten
Um die Auswirkungen einer nicht persistenten berechneten Spalte zu simulieren, erstellen Sie eine Ansicht der speicheroptimierten Tabelle. Fügen Sie in der SELECT-Anweisung, die die Ansicht definiert, die berechnete Spaltendefinition in die Ansicht ein. Mit Ausnahme einer nativ kompilierten gespeicherten Prozedur sollten Abfragen, die Werte aus der berechneten Spalte verwenden, aus der Ansicht lesen. Innerhalb der nativ kompilierten gespeicherten Prozeduren sollten Sie eine beliebige Select-, Update- oder Delete-Anweisung entsprechend Ihrer berechneten Spaltendefinition aktualisieren.
-- Schema for the table dbo.OrderDetails:
-- OrderId int not null primary key,
-- ProductId int not null,
-- SalePrice money not null,
-- Quantity int not null,
-- Total money not null
--
-- Total is computed as SalePrice * Quantity and is not persisted.
CREATE VIEW dbo.v_order_details AS
SELECT
OrderId,
ProductId,
SalePrice,
Quantity,
Quantity * SalePrice AS Total
FROM dbo.order_details
Gespeicherte berechnete Spalten
Um die Auswirkungen einer permanenten berechneten Spalte zu simulieren, erstellen Sie eine gespeicherte Prozedur zum Einfügen in die Tabelle und eine andere gespeicherte Prozedur zum Aktualisieren der Tabelle. Rufen Sie beim Einfügen oder Aktualisieren der Tabelle diese gespeicherten Prozeduren auf, um diese Aufgaben auszuführen. Berechnen Sie innerhalb der gespeicherten Prozeduren den Wert für das berechnete Feld entsprechend den Eingaben, ähnlich wie die berechnete Spalte in der ursprünglichen datenträgerbasierten Tabelle definiert ist. Fügen Sie dann die Tabelle nach Bedarf innerhalb der gespeicherten Prozedur ein, oder aktualisieren Sie sie.
-- Schema for the table dbo.OrderDetails:
-- OrderId int not null primary key,
-- ProductId int not null,
-- SalePrice money not null,
-- Quantity int not null,
-- Total money not null
--
-- Total is computed as SalePrice * Quantity and is persisted.
-- we need to create insert and update procedures to calculate Total.
CREATE PROCEDURE sp_insert_order_details
@OrderId int, @ProductId int, @SalePrice money, @Quantity int
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS BEGIN ATOMIC WITH (LANGUAGE = N'english', TRANSACTION ISOLATION LEVEL = SNAPSHOT)
-- compute the value here.
-- this stored procedure works with single rows only.
-- for bulk inserts, accept a table-valued parameter into the stored procedure
-- and use an INSERT INTO SELECT statement.
DECLARE @total money = @SalePrice * @Quantity
INSERT INTO dbo.OrderDetails (OrderId, ProductId, SalePrice, Quantity, Total)
VALUES (@OrderId, @ProductId, @SalePrice, @Quantity, @total)
END
GO
CREATE PROCEDURE sp_update_order_details_by_id
@OrderId int, @ProductId int, @SalePrice money, @Quantity int
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS BEGIN ATOMIC WITH (LANGUAGE = N'english', TRANSACTION ISOLATION LEVEL = SNAPSHOT)
-- compute the value here.
-- this stored procedure works with single rows only.
DECLARE @total money = @SalePrice * @Quantity
UPDATE dbo.OrderDetails
SET ProductId = @ProductId, SalePrice = @SalePrice, Quantity = @Quantity, Total = @total
WHERE OrderId = @OrderId
END
GO