Tables [Purchasing].[PurchaseOrderDetail]
Individual products associated with a specific purchase order. See PurchaseOrderHeader.
PropertyValue
Row Count (~)8845
Created13:14:19 14 marca 2012
Last Modified13:14:55 14 marca 2012
KeyNameData TypeComputedMax Length (Bytes)Allow NullsIdentityDefaultDescription
Cluster Primary Key PK_PurchaseOrderDetail_PurchaseOrderID_PurchaseOrderDetailID: PurchaseOrderID\PurchaseOrderDetailIDForeign Keys FK_PurchaseOrderDetail_PurchaseOrderHeader_PurchaseOrderID: [Purchasing].[PurchaseOrderHeader].PurchaseOrderIDPurchaseOrderIDint4
False
Primary key. Foreign key to PurchaseOrderHeader.PurchaseOrderID.
Cluster Primary Key PK_PurchaseOrderDetail_PurchaseOrderID_PurchaseOrderDetailID: PurchaseOrderID\PurchaseOrderDetailIDPurchaseOrderDetailIDint4
False
1 - 1Primary key. One line number per purchased product.
DueDatedatetime8
False
Date the product is expected to be received.
Check Constraints CK_PurchaseOrderDetail_OrderQty : ([OrderQty]>(0))OrderQtysmallint2
False
Quantity ordered.
Indexes IX_PurchaseOrderDetail_ProductIDForeign Keys FK_PurchaseOrderDetail_Product_ProductID: [Production].[Product].ProductIDProductIDint4
False
Product identification number. Foreign key to Product.ProductID.
Check Constraints CK_PurchaseOrderDetail_UnitPrice : ([UnitPrice]>=(0.00))UnitPricemoney8
False
Vendor's selling price of a single product.
LineTotalmoney
True
8
False
Per product subtotal. Computed as OrderQty * UnitPrice.
Check Constraints CK_PurchaseOrderDetail_ReceivedQty : ([ReceivedQty]>=(0.00))ReceivedQtydecimal(8,2)5
False
Quantity actually received from the vendor.
Check Constraints CK_PurchaseOrderDetail_RejectedQty : ([RejectedQty]>=(0.00))RejectedQtydecimal(8,2)5
False
Quantity rejected during inspection.
StockedQtydecimal(9,2)
True
5
False
Quantity accepted into inventory. Computed as ReceivedQty - RejectedQty.
ModifiedDatedatetime8
False
(getdate())Date and time the record was last updated.
NameColumn definition
LineTotal(isnull([OrderQty]*[UnitPrice],(0.00)))
StockedQty(isnull([ReceivedQty]-[RejectedQty],(0.00)))
KeyNameKey ColumnsUniqueDescription
Cluster Primary Key PK_PurchaseOrderDetail_PurchaseOrderID_PurchaseOrderDetailID: PurchaseOrderID\PurchaseOrderDetailIDPK_PurchaseOrderDetail_PurchaseOrderID_PurchaseOrderDetailIDPurchaseOrderID, PurchaseOrderDetailID
True
Primary key (clustered) constraint
IX_PurchaseOrderDetail_ProductIDProductIDNonclustered index.
NameANSI Nulls OnQuoted Identifier OnOnDescription
iPurchaseOrderDetail
True
True
After InsertAFTER INSERT trigger that inserts a row in the TransactionHistory table and updates the PurchaseOrderHeader.SubTotal column.
uPurchaseOrderDetail
True
True
After UpdateAFTER UPDATE trigger that inserts a row in the TransactionHistory table, updates ModifiedDate in PurchaseOrderDetail and updates the PurchaseOrderHeader.SubTotal column.
NameOn ColumnConstraintDescription
CK_PurchaseOrderDetail_OrderQtyOrderQty([OrderQty]>(0))Check constraint [OrderQty] > (0)
CK_PurchaseOrderDetail_ReceivedQtyReceivedQty([ReceivedQty]>=(0.00))Check constraint [ReceivedQty] >= (0.00)
CK_PurchaseOrderDetail_RejectedQtyRejectedQty([RejectedQty]>=(0.00))Check constraint [RejectedQty] >= (0.00)
CK_PurchaseOrderDetail_UnitPriceUnitPrice([UnitPrice]>=(0.00))Check constraint [UnitPrice] >= (0.00)
NameColumnsDescription
FK_PurchaseOrderDetail_Product_ProductIDProductID->[Production].[Product].[ProductID]Foreign key constraint referencing Product.ProductID.
FK_PurchaseOrderDetail_PurchaseOrderHeader_PurchaseOrderIDPurchaseOrderID->[Purchasing].[PurchaseOrderHeader].[PurchaseOrderID]Foreign key constraint referencing PurchaseOrderHeader.PurchaseOrderID.
CREATE TABLE [Purchasing].[PurchaseOrderDetail]
(
[PurchaseOrderID] [int] NOT NULL,
[PurchaseOrderDetailID] [int] NOT NULL IDENTITY(1, 1),
[DueDate] [datetime] NOT NULL,
[OrderQty] [smallint] NOT NULL,
[ProductID] [int] NOT NULL,
[UnitPrice] [money] NOT NULL,
[LineTotal] AS (isnull([OrderQty]*[UnitPrice],(0.00))),
[ReceivedQty] [decimal] (8, 2) NOT NULL,
[RejectedQty] [decimal] (8, 2) NOT NULL,
[StockedQty] AS (isnull([ReceivedQty]-[RejectedQty],(0.00))),
[ModifiedDate] [datetime] NOT NULL CONSTRAINT [DF_PurchaseOrderDetail_ModifiedDate] DEFAULT (getdate())
) ON [PRIMARY]
GO

CREATE TRIGGER [Purchasing].[iPurchaseOrderDetail] ON [Purchasing].[PurchaseOrderDetail]
AFTER INSERT AS
BEGIN
   DECLARE @Count int;

   SET @Count = @@ROWCOUNT;
   IF @Count = 0
       RETURN;

   SET NOCOUNT ON;

   BEGIN TRY
       INSERT INTO [Production].[TransactionHistory]
           ([ProductID]
           ,[ReferenceOrderID]
           ,[ReferenceOrderLineID]
           ,[TransactionType]
           ,[TransactionDate]
           ,[Quantity]
           ,[ActualCost])
       SELECT
           inserted.[ProductID]
           ,inserted.[PurchaseOrderID]
           ,inserted.[PurchaseOrderDetailID]
           ,'P'
           ,GETDATE()
           ,inserted.[OrderQty]
           ,inserted.[UnitPrice]
       FROM inserted
           INNER JOIN [Purchasing].[PurchaseOrderHeader]
           ON inserted.[PurchaseOrderID] = [Purchasing].[PurchaseOrderHeader].[PurchaseOrderID];

       -- Update SubTotal in PurchaseOrderHeader record. Note that this causes the
       -- PurchaseOrderHeader trigger to fire which will update the RevisionNumber.
       UPDATE [Purchasing].[PurchaseOrderHeader]
       SET [Purchasing].[PurchaseOrderHeader].[SubTotal] =
           (SELECT SUM([Purchasing].[PurchaseOrderDetail].[LineTotal])
               FROM [Purchasing].[PurchaseOrderDetail]
               WHERE [Purchasing].[PurchaseOrderHeader].[PurchaseOrderID] = [Purchasing].[PurchaseOrderDetail].[PurchaseOrderID])
       WHERE [Purchasing].[PurchaseOrderHeader].[PurchaseOrderID] IN (SELECT inserted.[PurchaseOrderID] FROM inserted);
   END TRY
   BEGIN CATCH
       EXECUTE [dbo].[uspPrintError];

       -- Rollback any active or uncommittable transactions before
       -- inserting information in the ErrorLog
       IF @@TRANCOUNT > 0
       BEGIN
           ROLLBACK TRANSACTION;
       END

       EXECUTE [dbo].[uspLogError];
   END CATCH;
END;
GO

CREATE TRIGGER [Purchasing].[uPurchaseOrderDetail] ON [Purchasing].[PurchaseOrderDetail]
AFTER UPDATE AS
BEGIN
   DECLARE @Count int;

   SET @Count = @@ROWCOUNT;
   IF @Count = 0
       RETURN;

   SET NOCOUNT ON;

   BEGIN TRY
       IF UPDATE([ProductID]) OR UPDATE([OrderQty]) OR UPDATE([UnitPrice])
       -- Insert record into TransactionHistory
       BEGIN
           INSERT INTO [Production].[TransactionHistory]
               ([ProductID]
               ,[ReferenceOrderID]
               ,[ReferenceOrderLineID]
               ,[TransactionType]
               ,[TransactionDate]
               ,[Quantity]
               ,[ActualCost])
           SELECT
               inserted.[ProductID]
               ,inserted.[PurchaseOrderID]
               ,inserted.[PurchaseOrderDetailID]
               ,'P'
               ,GETDATE()
               ,inserted.[OrderQty]
               ,inserted.[UnitPrice]
           FROM inserted
               INNER JOIN [Purchasing].[PurchaseOrderDetail]
               ON inserted.[PurchaseOrderID] = [Purchasing].[PurchaseOrderDetail].[PurchaseOrderID];

           -- Update SubTotal in PurchaseOrderHeader record. Note that this causes the
           -- PurchaseOrderHeader trigger to fire which will update the RevisionNumber.
           UPDATE [Purchasing].[PurchaseOrderHeader]
           SET [Purchasing].[PurchaseOrderHeader].[SubTotal] =
               (SELECT SUM([Purchasing].[PurchaseOrderDetail].[LineTotal])
                   FROM [Purchasing].[PurchaseOrderDetail]
                   WHERE [Purchasing].[PurchaseOrderHeader].[PurchaseOrderID]
                       = [Purchasing].[PurchaseOrderDetail].[PurchaseOrderID])
           WHERE [Purchasing].[PurchaseOrderHeader].[PurchaseOrderID]
               IN (SELECT inserted.[PurchaseOrderID] FROM inserted);

           UPDATE [Purchasing].[PurchaseOrderDetail]
           SET [Purchasing].[PurchaseOrderDetail].[ModifiedDate] = GETDATE()
           FROM inserted
           WHERE inserted.[PurchaseOrderID] = [Purchasing].[PurchaseOrderDetail].[PurchaseOrderID]
               AND inserted.[PurchaseOrderDetailID] = [Purchasing].[PurchaseOrderDetail].[PurchaseOrderDetailID];
       END;
   END TRY
   BEGIN CATCH
       EXECUTE [dbo].[uspPrintError];

       -- Rollback any active or uncommittable transactions before
       -- inserting information in the ErrorLog
       IF @@TRANCOUNT > 0
       BEGIN
           ROLLBACK TRANSACTION;
       END

       EXECUTE [dbo].[uspLogError];
   END CATCH;
END;
GO
ALTER TABLE [Purchasing].[PurchaseOrderDetail] ADD CONSTRAINT [CK_PurchaseOrderDetail_OrderQty] CHECK (([OrderQty]>(0)))
GO
ALTER TABLE [Purchasing].[PurchaseOrderDetail] ADD CONSTRAINT [CK_PurchaseOrderDetail_ReceivedQty] CHECK (([ReceivedQty]>=(0.00)))
GO
ALTER TABLE [Purchasing].[PurchaseOrderDetail] ADD CONSTRAINT [CK_PurchaseOrderDetail_RejectedQty] CHECK (([RejectedQty]>=(0.00)))
GO
ALTER TABLE [Purchasing].[PurchaseOrderDetail] ADD CONSTRAINT [CK_PurchaseOrderDetail_UnitPrice] CHECK (([UnitPrice]>=(0.00)))
GO
ALTER TABLE [Purchasing].[PurchaseOrderDetail] ADD CONSTRAINT [PK_PurchaseOrderDetail_PurchaseOrderID_PurchaseOrderDetailID] PRIMARY KEY CLUSTERED  ([PurchaseOrderID], [PurchaseOrderDetailID]) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_PurchaseOrderDetail_ProductID] ON [Purchasing].[PurchaseOrderDetail] ([ProductID]) ON [PRIMARY]
GO
ALTER TABLE [Purchasing].[PurchaseOrderDetail] ADD CONSTRAINT [FK_PurchaseOrderDetail_Product_ProductID] FOREIGN KEY ([ProductID]) REFERENCES [Production].[Product] ([ProductID])
GO
ALTER TABLE [Purchasing].[PurchaseOrderDetail] ADD CONSTRAINT [FK_PurchaseOrderDetail_PurchaseOrderHeader_PurchaseOrderID] FOREIGN KEY ([PurchaseOrderID]) REFERENCES [Purchasing].[PurchaseOrderHeader] ([PurchaseOrderID])
GO
EXEC sp_addextendedproperty N'MS_Description', N'Individual products associated with a specific purchase order. See PurchaseOrderHeader.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', NULL, NULL
GO
EXEC sp_addextendedproperty N'MS_Description', N'Date the product is expected to be received.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'DueDate'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Per product subtotal. Computed as OrderQty * UnitPrice.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'LineTotal'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Date and time the record was last updated.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'ModifiedDate'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Quantity ordered.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'OrderQty'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Product identification number. Foreign key to Product.ProductID.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'ProductID'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Primary key. One line number per purchased product.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'PurchaseOrderDetailID'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Primary key. Foreign key to PurchaseOrderHeader.PurchaseOrderID.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'PurchaseOrderID'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Quantity actually received from the vendor.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'ReceivedQty'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Quantity rejected during inspection.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'RejectedQty'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Quantity accepted into inventory. Computed as ReceivedQty - RejectedQty.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'StockedQty'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Vendor''s selling price of a single product.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'COLUMN', N'UnitPrice'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Check constraint [OrderQty] > (0)', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'CONSTRAINT', N'CK_PurchaseOrderDetail_OrderQty'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Check constraint [ReceivedQty] >= (0.00)', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'CONSTRAINT', N'CK_PurchaseOrderDetail_ReceivedQty'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Check constraint [RejectedQty] >= (0.00)', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'CONSTRAINT', N'CK_PurchaseOrderDetail_RejectedQty'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Check constraint [UnitPrice] >= (0.00)', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'CONSTRAINT', N'CK_PurchaseOrderDetail_UnitPrice'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Default constraint value of GETDATE()', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'CONSTRAINT', N'DF_PurchaseOrderDetail_ModifiedDate'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Foreign key constraint referencing Product.ProductID.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'CONSTRAINT', N'FK_PurchaseOrderDetail_Product_ProductID'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Foreign key constraint referencing PurchaseOrderHeader.PurchaseOrderID.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'CONSTRAINT', N'FK_PurchaseOrderDetail_PurchaseOrderHeader_PurchaseOrderID'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Primary key (clustered) constraint', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'CONSTRAINT', N'PK_PurchaseOrderDetail_PurchaseOrderID_PurchaseOrderDetailID'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Nonclustered index.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'INDEX', N'IX_PurchaseOrderDetail_ProductID'
GO
EXEC sp_addextendedproperty N'MS_Description', N'Clustered index created by a primary key constraint.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'INDEX', N'PK_PurchaseOrderDetail_PurchaseOrderID_PurchaseOrderDetailID'
GO
EXEC sp_addextendedproperty N'MS_Description', N'AFTER INSERT trigger that inserts a row in the TransactionHistory table and updates the PurchaseOrderHeader.SubTotal column.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'TRIGGER', N'iPurchaseOrderDetail'
GO
EXEC sp_addextendedproperty N'MS_Description', N'AFTER UPDATE trigger that inserts a row in the TransactionHistory table, updates ModifiedDate in PurchaseOrderDetail and updates the PurchaseOrderHeader.SubTotal column.', 'SCHEMA', N'Purchasing', 'TABLE', N'PurchaseOrderDetail', 'TRIGGER', N'uPurchaseOrderDetail'
GO