这是表格的样子:
create table Shipping
(
ShippingId int primary key identity(1,1),
ProductId int foreign key references Product(ProductId),
LargoEnCm decimal(16,2),
AltoEnCm decimal(16,2),
AnchoEnCm decimal(16,2),
PesoKg decimal(16,2),
PesoVolumen decimal(16,2),
PesoFacturable decimal(16,2),
A decimal(16,2),
B decimal(16,2),
C decimal(16,2),
D decimal(16,2),
E decimal(16,2),
F decimal(16,2),
G decimal(16,2)
)
例如,字段PesoVolumen
应该是一个计算字段:
(LargoEnCm * AltoEnCm * AnchoEnCm) / 6000
我如何声明此计算,以便每当有人输入行中的数据时,此字段会自动填充?
条件陈述怎么样? SQL支持这个吗?
例如,在PesoFacturable
中,PesoKg
或PesoVolumen
的值会进入其中,具体取决于哪个更大。 If语句可以解决这个问题,我可以直接在SQL中编写吗?
答案 0 :(得分:2)
查看documentation for computed columns。你需要这样的东西:
create table Shipping
(
ShippingId int primary key identity(1,1),
ProductId int foreign key references Product(ProductId),
LargoEnCm decimal(16,2),
AltoEnCm decimal(16,2),
AnchoEnCm decimal(16,2),
PesoKg decimal(16,2),
PesoFacturable decimal(16,2),
A decimal(16,2),
B decimal(16,2),
C decimal(16,2),
D decimal(16,2),
E decimal(16,2),
F decimal(16,2),
G decimal(16,2),
PesoVolumen AS (LargoEnCm * AltoEnCm * AnchoEnCm) / 6000
)
您可以将大多数表达式包括为计算列计算,包括CASE statements。
答案 1 :(得分:1)
CREATE TABLE [dbo].[Shipping]
(
[ShippingId] INT PRIMARY KEY IDENTITY(1,1),
[ProductId] INT FOREIGN KEY REFERENCES [dbo].[Product]([ProductId]),
[LargoEnCm] DECIMAL(16,2),
[AltoEnCm] DECIMAL(16,2),
[AnchoEnCm] DECIMAL(16,2),
[PesoKg] DECIMAL(16,2),
[PesoFacturable] AS CASE WHEN [PesoKg] > (([LargoEnCm] * [AltoEnCm] * [AnchoEnCm]) / 6000) THEN [PesoKg] ELSE (([LargoEnCm] * [AltoEnCm] * [AnchoEnCm]) / 6000) END,
[A] DECIMAL(16,2),
[B] DECIMAL(16,2),
[C] DECIMAL(16,2),
[D] DECIMAL(16,2),
[E] DECIMAL(16,2),
[F] DECIMAL(16,2),
[G] DECIMAL(16,2),
[PesoVolumen] AS (([LargoEnCm] * [AltoEnCm] * [AnchoEnCm]) / 6000)
)