Difference between revisions of "Dbo.uspGetBillOfMaterials (procedure)"
(New page: == wikibot == {| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse" |- | '''procedure | dbo.uspGetBillOfMaterials |- |} <pre> CREATE PROCEDURE [dbo].[uspGetBillO...) |
|||
| Line 46: | Line 46: | ||
END; | END; | ||
</pre> | </pre> | ||
| + | |||
| + | == automatically generated == | ||
| + | |||
| + | {| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse" | ||
| + | |- | ||
| + | | '''procedure | ||
| + | | dbo.uspGetBillOfMaterials | ||
| + | |- | ||
| + | |||
| + | | '''Description | ||
| + | | Stored procedure using a recursive query to return a multi-level bill of material for the specified ProductID. | ||
| + | |- | ||
| + | |||
| + | |} | ||
| + | |||
| + | <pre> | ||
| + | |||
| + | CREATE PROCEDURE [dbo].[uspGetBillOfMaterials] | ||
| + | @StartProductID [int], | ||
| + | @CheckDate [datetime] | ||
| + | AS | ||
| + | BEGIN | ||
| + | SET NOCOUNT ON; | ||
| + | |||
| + | -- Use recursive query to generate a multi-level Bill of Material (i.e. all level 1 | ||
| + | -- components of a level 0 assembly, all level 2 components of a level 1 assembly) | ||
| + | -- The CheckDate eliminates any components that are no longer used in the product on this date. | ||
| + | WITH [BOM_cte]([ProductAssemblyID], [ComponentID], [ComponentDesc], [PerAssemblyQty], [StandardCost], [ListPrice], [BOMLevel], [RecursionLevel]) -- CTE name and columns | ||
| + | AS ( | ||
| + | SELECT b.[ProductAssemblyID], b.[ComponentID], p.[Name], b.[PerAssemblyQty], p.[StandardCost], p.[ListPrice], b.[BOMLevel], 0 -- Get the initial list of components for the bike assembly | ||
| + | FROM [Production].[BillOfMaterials] b | ||
| + | INNER JOIN [Production].[Product] p | ||
| + | ON b.[ComponentID] = p.[ProductID] | ||
| + | WHERE b.[ProductAssemblyID] = @StartProductID | ||
| + | AND @CheckDate >= b.[StartDate] | ||
| + | AND @CheckDate <= ISNULL(b.[EndDate], @CheckDate) | ||
| + | UNION ALL | ||
| + | SELECT b.[ProductAssemblyID], b.[ComponentID], p.[Name], b.[PerAssemblyQty], p.[StandardCost], p.[ListPrice], b.[BOMLevel], [RecursionLevel] + 1 -- Join recursive member to anchor | ||
| + | FROM [BOM_cte] cte | ||
| + | INNER JOIN [Production].[BillOfMaterials] b | ||
| + | ON b.[ProductAssemblyID] = cte.[ComponentID] | ||
| + | INNER JOIN [Production].[Product] p | ||
| + | ON b.[ComponentID] = p.[ProductID] | ||
| + | WHERE @CheckDate >= b.[StartDate] | ||
| + | AND @CheckDate <= ISNULL(b.[EndDate], @CheckDate) | ||
| + | ) | ||
| + | -- Outer select from the CTE | ||
| + | SELECT b.[ProductAssemblyID], b.[ComponentID], b.[ComponentDesc], SUM(b.[PerAssemblyQty]) AS [TotalQuantity] , b.[StandardCost], b.[ListPrice], b.[BOMLevel], b.[RecursionLevel] | ||
| + | FROM [BOM_cte] b | ||
| + | GROUP BY b.[ComponentID], b.[ComponentDesc], b.[ProductAssemblyID], b.[BOMLevel], b.[RecursionLevel], b.[StandardCost], b.[ListPrice] | ||
| + | ORDER BY b.[BOMLevel], b.[ProductAssemblyID], b.[ComponentID] | ||
| + | OPTION (MAXRECURSION 25) | ||
| + | END; | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | {| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse" | ||
| + | |- style="background:silver" | ||
| + | | '''Referenced Object | ||
| + | | '''Object Type | ||
| + | | '''Dependency Type | ||
| + | |||
| + | |- | ||
| + | | [[Production.BillOfMaterials_(table)|Production.BillOfMaterials]] | ||
| + | | Table | ||
| + | | Select | ||
| + | |- | ||
| + | | [[Production.Product_(table)|Production.Product]] | ||
| + | | Table | ||
| + | | Select | ||
| + | |} | ||
Revision as of 00:00, 27 November 2009
wikibot
| procedure | dbo.uspGetBillOfMaterials |
CREATE PROCEDURE [dbo].[uspGetBillOfMaterials]
@StartProductID [int],
@CheckDate [datetime]
AS
BEGIN
SET NOCOUNT ON;
-- Use recursive query to generate a multi-level Bill of Material (i.e. all level 1
-- components of a level 0 assembly, all level 2 components of a level 1 assembly)
-- The CheckDate eliminates any components that are no longer used in the product on this date.
WITH [BOM_cte]([ProductAssemblyID], [ComponentID], [ComponentDesc], [PerAssemblyQty], [StandardCost], [ListPrice], [BOMLevel], [RecursionLevel]) -- CTE name and columns
AS (
SELECT b.[ProductAssemblyID], b.[ComponentID], p.[Name], b.[PerAssemblyQty], p.[StandardCost], p.[ListPrice], b.[BOMLevel], 0 -- Get the initial list of components for the bike assembly
FROM [Production].[BillOfMaterials] b
INNER JOIN [Production].[Product] p
ON b.[ComponentID] = p.[ProductID]
WHERE b.[ProductAssemblyID] = @StartProductID
AND @CheckDate >= b.[StartDate]
AND @CheckDate <= ISNULL(b.[EndDate], @CheckDate)
UNION ALL
SELECT b.[ProductAssemblyID], b.[ComponentID], p.[Name], b.[PerAssemblyQty], p.[StandardCost], p.[ListPrice], b.[BOMLevel], [RecursionLevel] + 1 -- Join recursive member to anchor
FROM [BOM_cte] cte
INNER JOIN [Production].[BillOfMaterials] b
ON b.[ProductAssemblyID] = cte.[ComponentID]
INNER JOIN [Production].[Product] p
ON b.[ComponentID] = p.[ProductID]
WHERE @CheckDate >= b.[StartDate]
AND @CheckDate <= ISNULL(b.[EndDate], @CheckDate)
)
-- Outer select from the CTE
SELECT b.[ProductAssemblyID], b.[ComponentID], b.[ComponentDesc], SUM(b.[PerAssemblyQty]) AS [TotalQuantity] , b.[StandardCost], b.[ListPrice], b.[BOMLevel], b.[RecursionLevel]
FROM [BOM_cte] b
GROUP BY b.[ComponentID], b.[ComponentDesc], b.[ProductAssemblyID], b.[BOMLevel], b.[RecursionLevel], b.[StandardCost], b.[ListPrice]
ORDER BY b.[BOMLevel], b.[ProductAssemblyID], b.[ComponentID]
OPTION (MAXRECURSION 25)
END;
automatically generated
| procedure | dbo.uspGetBillOfMaterials |
| Description | Stored procedure using a recursive query to return a multi-level bill of material for the specified ProductID. |
CREATE PROCEDURE [dbo].[uspGetBillOfMaterials]
@StartProductID [int],
@CheckDate [datetime]
AS
BEGIN
SET NOCOUNT ON;
-- Use recursive query to generate a multi-level Bill of Material (i.e. all level 1
-- components of a level 0 assembly, all level 2 components of a level 1 assembly)
-- The CheckDate eliminates any components that are no longer used in the product on this date.
WITH [BOM_cte]([ProductAssemblyID], [ComponentID], [ComponentDesc], [PerAssemblyQty], [StandardCost], [ListPrice], [BOMLevel], [RecursionLevel]) -- CTE name and columns
AS (
SELECT b.[ProductAssemblyID], b.[ComponentID], p.[Name], b.[PerAssemblyQty], p.[StandardCost], p.[ListPrice], b.[BOMLevel], 0 -- Get the initial list of components for the bike assembly
FROM [Production].[BillOfMaterials] b
INNER JOIN [Production].[Product] p
ON b.[ComponentID] = p.[ProductID]
WHERE b.[ProductAssemblyID] = @StartProductID
AND @CheckDate >= b.[StartDate]
AND @CheckDate <= ISNULL(b.[EndDate], @CheckDate)
UNION ALL
SELECT b.[ProductAssemblyID], b.[ComponentID], p.[Name], b.[PerAssemblyQty], p.[StandardCost], p.[ListPrice], b.[BOMLevel], [RecursionLevel] + 1 -- Join recursive member to anchor
FROM [BOM_cte] cte
INNER JOIN [Production].[BillOfMaterials] b
ON b.[ProductAssemblyID] = cte.[ComponentID]
INNER JOIN [Production].[Product] p
ON b.[ComponentID] = p.[ProductID]
WHERE @CheckDate >= b.[StartDate]
AND @CheckDate <= ISNULL(b.[EndDate], @CheckDate)
)
-- Outer select from the CTE
SELECT b.[ProductAssemblyID], b.[ComponentID], b.[ComponentDesc], SUM(b.[PerAssemblyQty]) AS [TotalQuantity] , b.[StandardCost], b.[ListPrice], b.[BOMLevel], b.[RecursionLevel]
FROM [BOM_cte] b
GROUP BY b.[ComponentID], b.[ComponentDesc], b.[ProductAssemblyID], b.[BOMLevel], b.[RecursionLevel], b.[StandardCost], b.[ListPrice]
ORDER BY b.[BOMLevel], b.[ProductAssemblyID], b.[ComponentID]
OPTION (MAXRECURSION 25)
END;
| Referenced Object | Object Type | Dependency Type |
| Production.BillOfMaterials | Table | Select |
| Production.Product | Table | Select |