AdventureWorks
| Table Name: | Sales.SalesOrderHeader |
| Description: | General sales order information. |
| Primary Keys: | SalesOrderID |
| Field | Type | Defaults | Nulls? | Comments |
|---|---|---|---|---|
| SalesOrderID | int - Identity | None | No | Primary key. |
| RevisionNumber | tinyint | ((0)) | No | Incremental number to track changes to the sales order over time. |
| OrderDate | datetime | (getdate()) | No | Dates the sales order was created. |
| DueDate | datetime | None | No | Date the order is due to the customer. |
| ShipDate | datetime | None | Yes | Date the order was shipped to the customer. |
| Status | tinyint | ((1)) | No | Order current status. 1 = In process; 2 = Approved; 3 = Backordered; 4 = Rejected; 5 = Shipped; 6 = Cancelled |
| OnlineOrderFlag | bit | ((1)) | No | 0 = Order placed by sales person. 1 = Order placed online by customer. |
| SalesOrderNumber | nvarchar (25) | None | No | Unique sales order identification number. |
| PurchaseOrderNumber | nvarchar (25) | None | Yes | Customer purchase order number reference. |
| AccountNumber | nvarchar (15) | None | Yes | Financial accounting number reference. |
| CustomerID | int | None | No | Customer identification number. Foreign key to Customer.CustomerID. |
| ContactID | int | None | No | Customer contact identification number. Foreign key to Contact.ContactID. |
| SalesPersonID | int | None | Yes | Sales person who created the sales order. Foreign key to SalesPerson.SalePersonID. |
| TerritoryID | int | None | Yes | Territory in which the sale was made. Foreign key to SalesTerritory.SalesTerritoryID. |
| BillToAddressID | int | None | No | Customer billing address. Foreign key to Address.AddressID. |
| ShipToAddressID | int | None | No | Customer shipping address. Foreign key to Address.AddressID. |
| ShipMethodID | int | None | No | Shipping method. Foreign key to ShipMethod.ShipMethodID. |
| CreditCardID | int | None | Yes | Credit card identification number. Foreign key to CreditCard.CreditCardID. |
| CreditCardApprovalCode | varchar (15) | None | Yes | Approval code provided by the credit card company. |
| CurrencyRateID | int | None | Yes | Currency exchange rate used. Foreign key to CurrencyRate.CurrencyRateID. |
| SubTotal | money | ((0.00)) | No | Sales subtotal. Computed as SUM(SalesOrderDetail.LineTotal)for the appropriate SalesOrderID. |
| TaxAmt | money | ((0.00)) | No | Tax amount. |
| Freight | money | ((0.00)) | No | Shipping cost. |
| TotalDue | money | None | No | Total due from customer. Computed as Subtotal + TaxAmt + Freight. |
| Comment | nvarchar (128) | None | Yes | Sales representative comments. |
| rowguid | uniqueidentifier | (newid()) | No | ROWGUIDCOL number uniquely identifying the record. Used to support a merge replication sample. |
| ModifiedDate | datetime | (getdate()) | No | Date and time the record was last updated. |
| Index | Clustered? | Unique? | Fields |
|---|---|---|---|
| PK_SalesOrderHeader_SalesOrderID | Yes | Yes | SalesOrderID |
| AK_SalesOrderHeader_rowguid | No | Yes | rowguid |
| AK_SalesOrderHeader_SalesOrderNumber | No | Yes | SalesOrderNumber |
| IX_SalesOrderHeader_CustomerID | No | No | CustomerID |
| IX_SalesOrderHeader_SalesPersonID | No | No | SalesPersonID |
| Check Constraint | Text |
|---|---|
| CK_SalesOrderHeader_Status | ([Status]>=(0) AND [Status]<=(8)) |
| CK_SalesOrderHeader_DueDate | ([DueDate]>=[OrderDate]) |
| CK_SalesOrderHeader_ShipDate | ([ShipDate]>=[OrderDate] OR [ShipDate] IS NULL) |
| CK_SalesOrderHeader_SubTotal | ([SubTotal]>=(0.00)) |
| CK_SalesOrderHeader_TaxAmt | ([TaxAmt]>=(0.00)) |
| CK_SalesOrderHeader_Freight | ([Freight]>=(0.00)) |
| Internal Foreign Key Constraint | Affected Field | Source Table |
|---|---|---|
| FK_SalesOrderHeader_Address_BillToAddressID | BillToAddressID | Person.Address |
| FK_SalesOrderHeader_Address_ShipToAddressID | ShipToAddressID | Person.Address |
| FK_SalesOrderHeader_Contact_ContactID | ContactID | Person.Contact |
| FK_SalesOrderHeader_CreditCard_CreditCardID | CreditCardID | Sales.CreditCard |
| FK_SalesOrderHeader_CurrencyRate_CurrencyRateID | CurrencyRateID | Sales.CurrencyRate |
| FK_SalesOrderHeader_Customer_CustomerID | CustomerID | Sales.Customer |
| FK_SalesOrderHeader_SalesPerson_SalesPersonID | SalesPersonID | Sales.SalesPerson |
| FK_SalesOrderHeader_SalesTerritory_TerritoryID | TerritoryID | Sales.SalesTerritory |
| FK_SalesOrderHeader_ShipMethod_ShipMethodID | ShipMethodID | Purchasing.ShipMethod |
| Primary Key as Foreign Key Constraint | Affected Table | Affected Field |
|---|---|---|
| FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID | Sales.SalesOrderDetail | SalesOrderID |
| FK_SalesOrderHeaderSalesReason_SalesOrderHeader_SalesOrderID | Sales.SalesOrderHeaderSalesReason | SalesOrderID |
| Trigger | Text |
|---|---|
| uSalesOrderHeader | CREATE TRIGGER [Sales].[uSalesOrderHeader] ON [Sales].[SalesOrderHeader] AFTER UPDATE NOT FOR REPLICATION AS BEGIN DECLARE @Count int; SET @Count = @@ROWCOUNT; IF @Count = 0 RETURN; SET NOCOUNT ON; BEGIN TRY IF NOT UPDATE([Status]) BEGIN UPDATE [Sales].[SalesOrderHeader] SET [Sales].[SalesOrderHeader].[RevisionNumber] = [Sales].[SalesOrderHeader].[RevisionNumber] + 1 WHERE [Sales].[SalesOrderHeader].[SalesOrderID] IN (SELECT inserted.[SalesOrderID] FROM inserted); END; IF UPDATE([SubTotal]) BEGIN DECLARE @StartDate datetime, @EndDate datetime SET @StartDate = [dbo].[ufnGetAccountingStartDate](); SET @EndDate = [dbo].[ufnGetAccountingEndDate](); UPDATE [Sales].[SalesPerson] SET [Sales].[SalesPerson].[SalesYTD] = (SELECT SUM([Sales].[SalesOrderHeader].[SubTotal]) FROM [Sales].[SalesOrderHeader] WHERE [Sales].[SalesPerson].[SalesPersonID] = [Sales].[SalesOrderHeader].[SalesPersonID] AND ([Sales].[SalesOrderHeader].[Status] = 5) -- Shipped AND [Sales].[SalesOrderHeader].[OrderDate] BETWEEN @StartDate AND @EndDate) WHERE [Sales].[SalesPerson].[SalesPersonID] IN (SELECT DISTINCT inserted.[SalesPersonID] FROM inserted WHERE inserted.[OrderDate] BETWEEN @StartDate AND @EndDate); UPDATE [Sales].[SalesTerritory] SET [Sales].[SalesTerritory].[SalesYTD] = (SELECT SUM([Sales].[SalesOrderHeader].[SubTotal]) FROM [Sales].[SalesOrderHeader] WHERE [Sales].[SalesTerritory].[TerritoryID] = [Sales].[SalesOrderHeader].[TerritoryID] AND ([Sales].[SalesOrderHeader].[Status] = 5) -- Shipped AND [Sales].[SalesOrderHeader].[OrderDate] BETWEEN @StartDate AND @EndDate) WHERE [Sales].[SalesTerritory].[TerritoryID] IN (SELECT DISTINCT inserted.[TerritoryID] FROM inserted WHERE inserted.[OrderDate] BETWEEN @StartDate AND @EndDate); END; END TRY BEGIN CATCH EXECUTE [dbo].[uspPrintError]; IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRANSACTION; END EXECUTE [dbo].[uspLogError]; END CATCH; END; |