I’m trying to create a multi-level BOM using MS SQL.
Here is my Table structure:
So if I link Part-number from T1 to Part-owner I get all parts for that level.
If I link back from T2 using Part-number to T1 I can link again to T2 and check if there are any lower level part structures.
This imbedded link has no limits but usually does not go more then 6-7 levels.
Can anyone help with setting up code for this BOM?
Your table structure looks valid for logically modeling a hierarchal system. The join you described sounds valid as well.
You might want to add a Where clause and use that in a criteria driven stored procedure that will generate a BOM explosion out of a select, given an assembly SetID; (to return a specific sub part listing result set for a setID representing a desired 'assembly'). Im not sure I understand what you are asking for help with, if you'd like, post an email to me with more specifics, and perhaps I can send you some examples that would help.
ON Maps.SetID = Sets.SetID
Sets Sets_1 ON Maps.SubID = Sets_1.SetID
Sets.SetID = [desired SetID]
I think you went over my head here…
My SQL exposure is somewhat limited. I have not used stored procedures and it sounds from your explanation that I should be using them.
The logic I was going to use was to link Table1 to Table2, then Table2 to Table1 using the other part, however, at some point that becomes imposable.
If the stored procedure is the way to go, can you elaborate a little more how to set it up and what it does?
RE: If the stored procedure is the way to go, can you elaborate a little more how to set it up and what it does?
Q1[How one may use a stored proc that accepts a parameter?]
A1 OK, I'll try to give you a short example here. If you'd like, post an email to me, and I can send you more complete demo examples.
Example using proc hr_Set_SubSets:
Assume you wish to see a BOM Explosion for a part / assembly number; say for part / assembly number 387. A stored proc that accepts an Int parameter and uses it as criteria on a properly constructed Select statement (built on the Maps and Sets tables) can do just that (assuming the Maps and Sets tables are correctly populated with data). Executing the example proc hr_Set_SubSets proc with 387 assigned to its parameter, would then return all 'components' for the part / assembly with a SetID = 387.
-- Example use of a stored proc hr_Set_SubSets:
select @vi = 387
Exec dbo.hr_Set_SubSets @pSetID = @vi
-- Creating the stored proc hr_Set_SubSets in the example:
CREATE Proc dbo.hr_Set_SubSets
dbo.Sets.SetName AS SetName,
dbo.Sets.SetID As SetID,
Sets_1.SetName AS SubSetName,
dbo.Maps.SubID As SubSetID
dbo.Maps.SetID = dbo.Sets.SetID
dbo.Maps.SubID = Sets_1.SetID
dbo.Sets.SetID = @pSetID
Maps and Sets schemas:
TABLE [Sets] (