2016-01-09 4 views
2

Я использую Microsoft SQL Server, и я все еще участвую. У меня есть две таблицы, таблица продуктов и таблица сведений о заказе. Таблица продуктов содержит цену, а затем в таблице сведений о заказах содержится ссылка на продукт, количество продукта и общая стоимость. Вот эти две таблицы:Как создать вычисляемый столбец, который ссылается на другой столбец из другой таблицы?

--Create Product Table 
CREATE TABLE Products.Product 
(
    product_id   INT    NOT NULL PRIMARY KEY IDENTITY, 
    product_name  VARCHAR(40)  NOT NULL, 
    product_desc  VARCHAR(5000), 
    product_price  SMALLMONEY  NOT NULL CHECK (product_price >= 0) 
); 

--Create Order Details Table 
CREATE TABLE Orders.Order_detail 
(
    order_detail_id  INT    NOT NULL PRIMARY KEY IDENTITY, 
    product_id   INT    NOT NULL, 
    product_quantity INT    NOT NULL CHECK (product_quantity >= 0), 
    order_detail_total MONEY   NOT NULL, 

    FOREIGN KEY (product_id)  REFERENCES Products.Product 
); 

Как я могу сделать так, чтобы order_detail_total это вычисляемый столбец, который является product_price * product_quantity?

+2

Привет @ kingcobra1986, у меня нет sqlserver прямо здесь, но, похоже, невозможно создать вычисленный столбец из другой таблицы, в соответствии с msoft. Однако вы можете создать функцию, которая поможет вам это сделать ... http://stackoverflow.com/questions/6867047/sql-server-computed-column-select-from-another-table –

+1

Вычисляемые столбцы ** не могут ** ссылки другие таблицы. –

+0

просто используйте вид – amdixon

ответ

1

Благодаря @Andy K, я пришел с этим решением:

--Create Product Table 
CREATE TABLE Products.Product 
(
    product_id   INT    NOT NULL PRIMARY KEY IDENTITY, 
    product_name  VARCHAR(40)  NOT NULL, 
    product_desc  VARCHAR(5000), 
    product_price  SMALLMONEY  NOT NULL CHECK (product_price >= 0) 
); 
GO 

--Create a function to calculate the order details total 
CREATE FUNCTION Orders.calcOrderDetailTotal(@quantity INT, @productId INT) 
RETURNS MONEY 
AS 
BEGIN 
    DECLARE @price SMALLMONEY 
    SELECT @price = product_price FROM Products.Product AS TP 
      WHERE TP.product_id = @productId 
    RETURN @quantity * @price 
END 
GO 

--Create Order Details Table 
CREATE TABLE Orders.Order_detail 
(
    order_detail_id  INT    NOT NULL PRIMARY KEY IDENTITY, 
    product_id   INT    NOT NULL, 
    product_quantity INT    NOT NULL CHECK (product_quantity >= 0), 
    order_detail_total MONEY   NOT NULL, 

    FOREIGN KEY (product_id)  REFERENCES Products.Product 
); 

Это работает для меня на тестовой БД, которую я создал.

Смежные вопросы