코드 1-6 SQL Server의 함수와 테이블 정의
CREATE FUNCTION dbo.getOrderTotal(@orderId int)
RETURNS money
AS
BEGIN
DECLARE @r money
SELECT @r = SUM(Quantity * Price)
FROM Order_Details WHERE OrderNumber = @orderId
RETURN @r;
END;
GO
CREATE TABLE Orders (
OrderNumber int NOT NULL,
OrderDate date NULL,
ShipDate date NULL,
CustomerID int NULL,
EmployeeID int NULL,
OrderTotal money AS dbo.getOrderTotal(OrderNumber)
);
이런 식으로 처리하는 것은 매우 좋지 않은 생각이다. 이 함수는 비결정적 함수이고, 이 계산 컬럼은 테이블의 다른 실제 컬럼처럼 값이 지속되지 않기 때문이다. 또 이 컬럼으로는 인덱스를 만들 수 없고, 컬럼을 참조할 때마다 각 로우에 대해 서버가 함수를 호출해야 하므로 서버에 매우 많은 부하가 걸린다. 차라리 결과가 필요할 때마다 OrderID 컬럼을 기준으로 집계해 계산하는 서브쿼리로 해당 테이블을 조인하는 것이 훨씬 더 효율적이다.