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 |
|
John T.
Posting Yak Master
112 Posts |
Posted - 2003-04-29 : 12:57:27
|
| I am looking for criticism. I am certain it is not efficient as it can be. What better place to find out.I am sending into the sproc some values. Then I take some values from a table in the db to insert into a record in another table. Values into sproc + fields from Table1 = fields in Table2<code>Create Procedure MainInsert @cap varchar(50),@gno varchar(50),@uns varchar(50), @asel varchar(50),@os varchar(50) ASDeclare @gtime SMALLDATETIME Declare @gm varchar(50)Declare @sp varchar(50)Declare @type varchar(50)Declare @sel varchar(50)Declare @conos SMALLINT Declare @ptime SMALLDATETIME Declare @conuns SMALLINTSELECT @gtime = GTime FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno)SELECT @gm = Vis + 'vs.' + Home FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno)SET @ptime = GETDATE()SET @conuns = CONVERT(SMALLINT,@uns)SET @conos = CONVERT(SMALLINT, @os)IF @asel = 'V'BEGINSET @sp = 'MLB'SET @type = 'Gm'SELECT @sel = Vis FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno)SELECT @os = Vos FROM Table1 WHERE IDNum = CONVERT(SMALLINT, @gno)ENDELSE IF @asel = 'H'BEGINSET @sp = 'MLB'SET @type = 'Gm'SELECT @sel = Home FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno)SELECT @os = Hos FROM Table1 WHERE IDNum = CONVERT(SMALLINT, @gno)ENDELSE IF @asel = 'O'BEGINSET @sp = 'MLB'SET @type = 'T'SELECT @sel = CONVERT(varchar,Tot) FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno)SET @sel = @sel + 'o'SELECT @os = Ov FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno)ENDELSE IF @asel = 'U'BEGINSET @sp = 'MLB'SET @type = 'T'SELECT @sel = CONVERT(varchar,Tot) FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno)SET @sel = @sel + 'u'SELECT @os = Un FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno)ENDINSERT INTO Table2 (Cap,GNum,Gm,GTime,Sp,Type,Sel,Os,Uns,PTime,Asel)VALUES((@cap,@gno,@gm,@gtime,@sp,@type,@sel,@conos,@conuns,@ptime,@asel)GO</code>I know it ain't pretty. Is this spaghetti code? |
|
|
ValterBorges
Master Smack Fu Yak Hacker
1429 Posts |
Posted - 2003-04-29 : 13:06:08
|
| Can you post some ddl and dml so we can test without having to make it up. |
 |
|
|
John T.
Posting Yak Master
112 Posts |
Posted - 2003-04-29 : 13:21:47
|
| Hope this is what you want.Table1IDNum SMALLINT auto incrementingVis varchar(50)Vos SMALLINTHome varchar(50)Tot DEC(3,1)Ov SMALLINTUn SMALLINTGTime SMALLDATETIMETable2Cap varchar(50)GNum varchar(50)Gm varchar(80)GTime SMALLDATETIMESp varchar(50)Type varchar(50)Sel varchar(50)Os SMALLINTUns SMALLINTPTime SMALLDATETIMEAsel varchar(50) |
 |
|
|
ValterBorges
Master Smack Fu Yak Hacker
1429 Posts |
Posted - 2003-04-29 : 13:36:13
|
| close enough for the ddl.It should really be CREATE TABLE TableXblahablahadml should look likeINSERT INTO TABLEX (col1,col23....)VALUES (x1,x2....) |
 |
|
|
ValterBorges
Master Smack Fu Yak Hacker
1429 Posts |
Posted - 2003-04-29 : 14:16:59
|
| This can be combined into one statementSELECT @gtime = GTime FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno) SELECT @gm = Vis + 'vs.' + Home FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno) SELECT @gtime = GTime, @gm = Vis + 'vs.' + HomeFROM Table1 WHERE IDNum = CONVERT(SMALLINT,gno)Also why pass the stored proc a varchar when it represents an integerwhy not just pass it an integer??It would remove the convert and make the code more readable.continuing dissection.....1st Round of optimization...SELECT @gtime = GTime, @gm = Vis + 'vs.' + Home FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno) SET @conuns = CONVERT(SMALLINT,@uns) SET @conos = CONVERT(SMALLINT, @os) IF @asel = 'V' BEGIN SELECT @sp = 'MLB', @type = 'Gm', @sel = Vis, @os = Vos FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno) END ELSE IF @asel = 'H' BEGIN SELECT @sp = 'MLB', @type = 'Gm', @sel = Home, @os = Hos FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno) END ELSE IF @asel = 'O' BEGIN SELECT @sp = 'MLB', @type = 'T', @sel = CONVERT(varchar,Tot) + 'o', @os = Ov FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno) END ELSE IF @asel = 'U' BEGIN SELECT @sp = 'MLB', @type = 'T', @sel = CONVERT(varchar,Tot) + ' u', @os = Un FROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno) END INSERT INTO Table2 (Cap,GNum,Gm,GTime,Sp,Type,Sel,Os,Uns,PTime,Asel) VALUES((@cap,@gno,@gm,@gtime,@sp,@type,@sel,@conos,@conuns,@ptime,@asel) Continuing into 2 round to combine statements.......INSERT INTO Table2 (Cap,GNum,Gm,GTime,Sp,Type,Sel,Os,Uns,PTime,Asel) SELECT @cap,@gno,@gm = Vis + 'vs.' + Home,@gtime = GTime, @sp = 'MLB',@type = CASE WHEN @asel IN ('V','H') THEN 'Gm'WHEN @asel IN ('O', 'U') THEN 'T'END,@sel =CASE WHEN @asel IN ('V') THEN Vis WHEN @asel IN ('H') THEN HomeWHEN @asel IN ('O') THEN CONVERT(varchar,Tot) + 'o'WHEN @asel IN ('U') THEN CONVERT(varchar,Tot) + ' u'END,@os =CASE WHEN @asel IN ('V') THEN Vos WHEN @asel IN ('H') THEN HosWHEN @asel IN ('O') THEN OvWHEN @asel IN ('U') THEN UnEND,@conos = CONVERT(SMALLINT, @os), @conuns = CONVERT(SMALLINT,@uns),@ptime,@aselFROM Table1 WHERE IDNum = CONVERT(SMALLINT,@gno) For more optimization now we need to now what you're doing, why you're doing it, some sample data, the expected results and what you plan on doing with table2.Edited by - ValterBorges on 04/29/2003 14:41:50 |
 |
|
|
|
|
|
|
|