Создание вычисляемого поля для моей простой таблицы SQL 2008 - PullRequest
1 голос
/ 01 ноября 2011

Вот как выглядит таблица:

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?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Посмотрите документацию для вычисляемых столбцов .Вам нужно что-то вроде этого:

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 .

1 голос
/ 01 ноября 2011
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)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...