sql-server - 如何创建一个计算列来引用另一个表中的另一列?

标签 sql-server tsql

我正在使用 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

最佳答案

感谢@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
);

这在我创建的测试数据库上对我有用。

关于sql-server - 如何创建一个计算列来引用另一个表中的另一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34690919/

相关文章:

sql-server - 为什么 DATEADD 会减慢 SQL 查询速度?

sql - 使用起始值设置 Identity_insert ON

sql-server - SQL Server 还原检查点文件

sql - 随SQL Server驱动程序一起无法成功连接,登录失败

sql - 在 WHERE 子句中引用列别名

sql-server-2008 - T-SQL 逐行衰减

SQL Server 相当于 Oracle 的 NULLS FIRST?

c# - 由于删除/创建 SQL Server View 而导致登录 ASP 应用程序期间出现死锁

sql-server - 如何在 SQL Server 中跟踪数据库写入?

sql-server - 从 MS SQL Server 使用 sp_send_dbmail 时如何设置自定义电子邮件 header ?