Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
shifis
Posting Yak Master
157 Posts |
Posted - 2003-04-02 : 21:00:27
|
| I have a table ICSELECT that have and IDSELECT field with the information of the inventory clases major and minor that the Department of Inventory with count.For example the IDSELECT-> IDTEST have MAJ_CLAS MIN_CLAS112 43 98 30102 129 57 So I have to go to the ITEMMAST ( Item Master table) and make a quey like thisSelect Item, descriptionfrom ITEMMASTwhere (MAJ_CLAS=112 AND MIN_CLAS=43) OR (MAJ_CLAS=98 AND MIN_CLAS=30) OR (MAJ_CLAS=102) OR (MAJ_CLAS=129 AND MIN_CLAS=57) That is to print the sheets that we give to the people that go and count the item in the stores.The problem is that the table ICSELECT have 20 major and minor clase fiels and some time they only will fill one per IDSELECT or they can have 20 too. So the number of conditions is not a thing that I can have to make my store procedure.For example the last sentences will be something likeSelect Item, descriptionfrom ITEMMASTwhere (MAJ_CLAS=maj_class_01 AND MIN_CLAS=min_class_01) OR (MAJ_CLAS=maj_class_02 AND MIN_CLAS=min_class_02) OR (MAJ_CLAS=maj_class_03) OR (MAJ_CLAS=maj_class_04 AND MIN_CLAS=min_class_04)Where I have to send the maj_clas_## and min_class_## has parameters ( I suppose), and other thing the user can have just a major classes in some of the case, so the condition can be: (MAJ_CLAS=maj_class_03) OR (MAJ_CLAS=maj_class_04 AND MIN_CLAS=min_class_04)Thanks in advance for take a time to read this.I hope you undestand my english. |
|
|
timmy
Master Smack Fu Yak Hacker
1242 Posts |
Posted - 2003-04-02 : 21:59:43
|
| If I understand correctly, you're trying to create a query that has a variable number of conditions. In this case, you should create the query as a string, then execute it with the sp_ExecuteSQL system stored procedure. You can find out more about this in the SQL Server books online. |
 |
|
|
shifis
Posting Yak Master
157 Posts |
Posted - 2003-04-03 : 18:18:37
|
Thanks for your help I am using DECLARE @InsertString varchar(5000) SET @InsertString = ('SELECT dbo.ITEMLOC.COMPANY, dbo.ITEMLOC.LOCATIONFROM dbo.ITEMLOC ')exec (@InsertString)ans if works just fine, but now that I am trying with this stament I got the error:Line 16: Incorrect syntax near 'TJU01'.SET @InsertString = ('SELECT dbo.ITEMLOC.COMPANY, dbo.ITEMLOC.LOCATIONFROM dbo.ITEMLOC ')SET @InsertString =('SELECT TOP 100 PERCENT dbo.ITEMLOC.COMPANY, dbo.ITEMLOC.LOCATION, dbo.ICLOCATION.NAME, dbo.ITEMMAST.ITEM, dbo.ITEMMAST.DESCRIPTION, dbo.ITEMMAST.SALES_MAJCL, dbo.MAJORCL.DESCRIPTION AS EXPR1, dbo.ITEMMAST.SALES_MINCL, dbo.MINORCL.DESCRIPTION AS EXPR2FROM dbo.MINORCL INNER JOIN dbo.MAJORCL ON dbo.MINORCL.MAJOR_CLASS = dbo.MAJORCL.MAJOR_CLASS AND dbo.MINORCL.ITEM_GROUP = dbo.MAJORCL.ITEM_GROUP AND dbo.MINORCL.CLASS_TYPE = dbo.MAJORCL.CLASS_TYPE INNER JOIN dbo.ITEMMAST ON dbo.MINORCL.MAJOR_CLASS = dbo.ITEMMAST.INVEN_MAJCL AND dbo.MINORCL.MINOR_CLASS = dbo.ITEMMAST.INVEN_MINCL AND dbo.MINORCL.ITEM_GROUP = dbo.ITEMMAST.ITEM_GROUP INNER JOIN dbo.ITEMLOC ON dbo.ITEMMAST.ITEM = dbo.ITEMLOC.ITEM INNER JOIN dbo.ICLOCATION ON dbo.ITEMLOC.LOCATION = dbo.ICLOCATION.LOCATION AND dbo.ITEMLOC.COMPANY = dbo.ICLOCATION.COMPANYWHERE (dbo.ITEMLOC.LOCATION = 'TJU01') AND (dbo.MINORCL.CLASS_TYPE = 'I') AND (dbo.ITEMMAST.SALES_MAJCL = '109') AND (dbo.ITEMMAST.SALES_MINCL = '702') AND (dbo.ITEMLOC.COMPANY = 2000) OR (dbo.ITEMLOC.LOCATION = 'TJU01') AND (dbo.MINORCL.CLASS_TYPE = 'I') AND (dbo.ITEMMAST.SALES_MAJCL = '109') AND (dbo.ITEMMAST.SALES_MINCL = '467') AND (dbo.ITEMMAST.SALES_MAJCL = '107') OR (dbo.ITEMLOC.LOCATION = 'TJU01') AND (dbo.MINORCL.CLASS_TYPE = 'I') AND (dbo.ITEMMAST.SALES_MAJCL = '109') AND (dbo.ITEMMAST.SALES_MAJCL = '106')') |
 |
|
|
samsekar
Constraint Violating Yak Guru
437 Posts |
Posted - 2003-04-04 : 02:05:49
|
quote: got the error:Line 16: Incorrect syntax near 'TJU01'.
Try This..declare @InsertString varchar(8000)SET @InsertString =('SELECT TOP 100 PERCENT dbo.ITEMLOC.COMPANY, dbo.ITEMLOC.LOCATION, dbo.ICLOCATION.NAME, dbo.ITEMMAST.ITEM, dbo.ITEMMAST.DESCRIPTION, dbo.ITEMMAST.SALES_MAJCL, dbo.MAJORCL.DESCRIPTION AS EXPR1, dbo.ITEMMAST.SALES_MINCL, dbo.MINORCL.DESCRIPTION AS EXPR2 FROM dbo.MINORCL INNER JOIN dbo.MAJORCL ON dbo.MINORCL.MAJOR_CLASS = dbo.MAJORCL.MAJOR_CLASS AND dbo.MINORCL.ITEM_GROUP = dbo.MAJORCL.ITEM_GROUP AND dbo.MINORCL.CLASS_TYPE = dbo.MAJORCL.CLASS_TYPE INNER JOIN dbo.ITEMMAST ON dbo.MINORCL.MAJOR_CLASS = dbo.ITEMMAST.INVEN_MAJCL AND dbo.MINORCL.MINOR_CLASS = dbo.ITEMMAST.INVEN_MINCL AND dbo.MINORCL.ITEM_GROUP = dbo.ITEMMAST.ITEM_GROUP INNER JOIN dbo.ITEMLOC ON dbo.ITEMMAST.ITEM = dbo.ITEMLOC.ITEM INNER JOIN dbo.ICLOCATION ON dbo.ITEMLOC.LOCATION = dbo.ICLOCATION.LOCATION AND dbo.ITEMLOC.COMPANY = dbo.ICLOCATION.COMPANY WHERE (dbo.ITEMLOC.LOCATION = ''TJU01'') AND (dbo.MINORCL.CLASS_TYPE = ''I'') AND (dbo.ITEMMAST.SALES_MAJCL = 109) AND (dbo.ITEMMAST.SALES_MINCL = 702) AND (dbo.ITEMLOC.COMPANY = 2000) OR (dbo.ITEMLOC.LOCATION = ''TJU01'') AND (dbo.MINORCL.CLASS_TYPE = ''I'') AND (dbo.ITEMMAST.SALES_MAJCL = 109) AND (dbo.ITEMMAST.SALES_MINCL = 467) AND (dbo.ITEMMAST.SALES_MAJCL = 107) OR (dbo.ITEMLOC.LOCATION = ''TJU01'') AND (dbo.MINORCL.CLASS_TYPE = ''I'') AND (dbo.ITEMMAST.SALES_MAJCL = 109) AND (dbo.ITEMMAST.SALES_MAJCL = 106)')print @InsertStringSekar~~~~Success is not a destination that you ever reach. Success is the quality of your journey. |
 |
|
|
samsekar
Constraint Violating Yak Guru
437 Posts |
Posted - 2003-04-04 : 02:09:58
|
quote: WHERE (dbo.ITEMLOC.LOCATION = ''TJU01'') AND (dbo.MINORCL.CLASS_TYPE = ''I'') AND (dbo.ITEMMAST.SALES_MAJCL = 109) AND (dbo.ITEMMAST.SALES_MINCL = 702) AND (dbo.ITEMLOC.COMPANY = 2000) OR (dbo.ITEMLOC.LOCATION = ''TJU01'') AND (dbo.MINORCL.CLASS_TYPE = ''I'') AND (dbo.ITEMMAST.SALES_MAJCL = 109) AND (dbo.ITEMMAST.SALES_MINCL = 467) AND (dbo.ITEMMAST.SALES_MAJCL = 107) OR (dbo.ITEMLOC.LOCATION = ''TJU01'') AND (dbo.MINORCL.CLASS_TYPE = ''I'') AND (dbo.ITEMMAST.SALES_MAJCL = 109) AND (dbo.ITEMMAST.SALES_MAJCL = 106)')print @InsertString
Wondering why this conditions are repeated..Can't we try replacing the where conditions like this.. WHERE (dbo.ITEMLOC.LOCATION = ''TJU01'') AND (dbo.MINORCL.CLASS_TYPE = ''I'') AND (dbo.ITEMMAST.SALES_MAJCL = 109) AND ((dbo.ITEMMAST.SALES_MINCL = 702) AND (dbo.ITEMLOC.COMPANY = 2000) OR (dbo.ITEMMAST.SALES_MINCL = 467) AND (dbo.ITEMMAST.SALES_MAJCL = 107) OR (dbo.ITEMMAST.SALES_MAJCL = 106))Sekar~~~~Success is not a destination that you ever reach. Success is the quality of your journey. |
 |
|
|
shifis
Posting Yak Master
157 Posts |
Posted - 2003-04-04 : 14:12:27
|
| That you all for you help!!The doble '' works and the where clause was modified. Now that I have proved this in the Query analyzer I want to write and store procedure that sent the string.Store procedure:----------CREATE PROCEDURE SP_EXEC @InsertString varchar(5000) ASexec (@InsertString)GO--------I send this string var from visual basic, and I receive and error in the last '). What is the way I have to send the string to de SP?First I put doble ' here too but then I get the error on 'TJU01'.'VB CodestrQuery = "SELECT ITEMLOC.COMPANY, ITEMLOC.LOCATION, ICLOCATION.NAME, ITEMMAST.ITEM, ITEMMAST.DESCRIPTION, ITEMMAST.SALES_MAJCL, MAJORCL.DESCRIPTION AS EXPR1, ITEMMAST.SALES_MINCL,MINORCL.DESCRIPTION AS EXPR2 FROM MINORCL INNER JOIN MAJORCL ON MINORCL.MAJOR_CLASS = MAJORCL.MAJOR_CLASS AND MINORCL.ITEM_GROUP = MAJORCL.ITEM_GROUP AND MINORCL.CLASS_TYPE = MAJORCL.CLASS_TYPE INNER JOIN ITEMMAST ON MINORCL.MAJOR_CLASS = ITEMMAST.INVEN_MAJCL AND MINORCL.MINOR_CLASS = ITEMMAST.INVEN_MINCL AND MINORCL.ITEM_GROUP = ITEMMAST.ITEM_GROUP INNER JOIN ITEMLOC ON ITEMMAST.ITEM = ITEMLOC.ITEM INNER JOIN ICLOCATION ON ITEMLOC.LOCATION = ICLOCATION.LOCATION AND ITEMLOC.COMPANY = ICLOCATION.COMPANY WHERE (ITEMLOC.COMPANY = 2000) AND(ITEMLOC.LOCATION = 'TJU01') AND (MINORCL.CLASS_TYPE = 'I') AND ( ((ITEMMAST.SALES_MAJCL ='18 ') AND (ITEMMAST.SALES_MINCL ='3 ')) OR ((ITEMMAST.SALES_MAJCL ='18 ') AND (ITEMMAST.SALES_MINCL ='4 '))')"SQL = "SP_EXEC '" & strQuery & "'"Set adoRS = New ADODB.RecordsetadoRS.Open sSQL, gcnSQL, adOpenForwardOnly, adLockReadOnly, adCmdTextWith adoRS If .EOF And .BOF Then 'No encontro MsgBox "NO HUBO DATOS" Else MsgBox "DATOS" End IfEnd WithEnd Sub |
 |
|
|
shifis
Posting Yak Master
157 Posts |
Posted - 2003-04-04 : 14:26:47
|
| I wrote wrong the string { I forgot the firt (' ..}That is because in the program I have something like strQuery = "('" & strQIni & strQMid & strQFin & "')" But I put for you all the string together.strQuery = "('SELECT ITEMLOC.COMPANY, ITEMLOC.LOCATION, ICLOCATION.NAME, ITEMMAST.ITEM, ITEMMAST.DESCRIPTION, ITEMMAST.SALES_MAJCL, MAJORCL.DESCRIPTION AS EXPR1, ITEMMAST.SALES_MINCL,MINORCL.DESCRIPTION AS EXPR2 FROM MINORCL INNER JOIN MAJORCL ON MINORCL.MAJOR_CLASS = MAJORCL.MAJOR_CLASS AND MINORCL.ITEM_GROUP = MAJORCL.ITEM_GROUP AND MINORCL.CLASS_TYPE = MAJORCL.CLASS_TYPE INNER JOIN ITEMMAST ON MINORCL.MAJOR_CLASS = ITEMMAST.INVEN_MAJCL AND MINORCL.MINOR_CLASS = ITEMMAST.INVEN_MINCL AND MINORCL.ITEM_GROUP = ITEMMAST.ITEM_GROUP INNER JOIN ITEMLOC ON ITEMMAST.ITEM = ITEMLOC.ITEM INNER JOIN ICLOCATION ON ITEMLOC.LOCATION = ICLOCATION.LOCATION AND ITEMLOC.COMPANY = ICLOCATION.COMPANY WHERE (ITEMLOC.COMPANY = 2000) AND(ITEMLOC.LOCATION = 'TJU01') AND (MINORCL.CLASS_TYPE = 'I') AND ( ((ITEMMAST.SALES_MAJCL ='18 ') AND (ITEMMAST.SALES_MINCL ='3 ')) OR ((ITEMMAST.SALES_MAJCL ='18 ') AND (ITEMMAST.SALES_MINCL ='4 '))')" |
 |
|
|
|
|
|
|
|