jadams0173
Technical User
- Feb 18, 2005
- 1,210
Using sql 2000
I need to update only rows that have changed data. The incoming data is from a VB front end that passes parameters to the SP. I currently update the rows whether they need it or not, but this is causing the LAST_UPDATE field to be changed when none of the other data changes.
I could do this in the front end, but would rather do it in sql (unless this is a really bad practice). I've got my VB forms and code nailed down and would like to not have to change it, but I can if that's what I should do.
I thought of loading the incoming data into a #temp table and join to the current data to see if it changed. I'm also open for suggestions. This is my current SP
I need to update only rows that have changed data. The incoming data is from a VB front end that passes parameters to the SP. I currently update the rows whether they need it or not, but this is causing the LAST_UPDATE field to be changed when none of the other data changes.
I could do this in the front end, but would rather do it in sql (unless this is a really bad practice). I've got my VB forms and code nailed down and would like to not have to change it, but I can if that's what I should do.
I thought of loading the incoming data into a #temp table and join to the current data to see if it changed. I'm also open for suggestions. This is my current SP
Code:
[COLOR=green]/*
[/color][COLOR=green]this will update or insert data saved from the front end into the database
[/color][COLOR=green]*/[/color]
[COLOR=blue]ALTER[/color] [COLOR=blue]procedure[/color] USP_Save_Data_Master_Scheduler
[COLOR=green]--THIS WILL BE THE SEQUENCE IN WHICH THEY ARE IN THE LV FOR EACH TAB
[/color]@MO [COLOR=blue]Char[/color](8),
@ITEM [COLOR=blue]CHAR[/color](20),
@SCHED_DATE [COLOR=#FF00FF]DATETIME[/color],
[COLOR=green]--@LINE CHAR(5),
[/color]@PRIORITY [COLOR=blue]INT[/color],
@PASS [COLOR=blue]SMALLINT[/color],
@COMMENT [COLOR=blue]VARCHAR[/color](500),
@SCHEDULED_QTY [COLOR=blue]INT[/color],
[COLOR=green]--@RUN_QTY INT,
[/color]@STATUS [COLOR=blue]INT[/color],
@SCHEDULED_LINE [COLOR=blue]INT[/color],
@OTHER_SIDE [COLOR=blue]VARCHAR[/color](6)
[COLOR=blue]AS[/color]
[COLOR=blue]Set[/color] [COLOR=#FF00FF]NOCOUNT[/color] [COLOR=blue]ON[/color]
[COLOR=blue]DECLARE[/color] @UPDATEID [COLOR=blue]AS[/color] [COLOR=blue]INT[/color],
@COST_FMLY [COLOR=blue]CHAR[/color](5)
[COLOR=blue]SET[/color] @UPDATEID = (
[COLOR=blue]SELECT[/color] MYID
[COLOR=blue]FROM[/color] SCHEDULE_DATA
[COLOR=blue]WHERE[/color] MO = @MO
AND PASS = @PASS
)
[COLOR=blue]print[/color] @UPDATEID
[COLOR=green]--SEE IF WE HAVE AN ID. IF SO WE NEED TO UPDATE
[/color][COLOR=blue]IF[/color] [COLOR=#FF00FF]COALESCE[/color](@UPDATEID,0) > 0
[COLOR=blue]BEGIN[/color]
[COLOR=green]--UPDATE THE RECORD FOR THE ID
[/color] [COLOR=blue]UPDATE[/color] SCHEDULE_DATA
[COLOR=blue]SET[/color] SCHED_DATE = @SCHED_DATE ,
SCHEDULED_LINE = @SCHEDULED_LINE ,
PRIORITY = @PRIORITY ,
LAST_UPDATE = [COLOR=#FF00FF]GETDATE[/color]() ,
[COLOR=blue]COMMENT[/color] = @COMMENT ,
STATUS = @STATUS ,
REL_DTS = [COLOR=blue]CASE[/color] @STATUS
[COLOR=blue]WHEN[/color] 0 [COLOR=blue]THEN[/color] [COLOR=#FF00FF]GETDATE[/color]()
[COLOR=blue]WHEN[/color] 4 [COLOR=blue]THEN[/color] [COLOR=#FF00FF]GETDATE[/color]()
[COLOR=blue]ELSE[/color] null
[COLOR=blue]END[/color]
[COLOR=green]--SCHEDULED_LINE = @SCHEDULED_LINE
[/color] [COLOR=blue]WHERE[/color] MYID = @UPDATEID
[COLOR=blue]END[/color]
[COLOR=blue]ELSE[/color]
[COLOR=green]--THIS IS A NEW RECORD SO INSERT THE DATA
[/color] [COLOR=blue]BEGIN[/color]
[COLOR=green]--GET THE COST FAMILY
[/color] [COLOR=blue]SET[/color] @COST_FMLY = [COLOR=#FF00FF]reverse[/color]([COLOR=#FF00FF]left[/color](dbo.getnumbers([COLOR=#FF00FF]reverse[/color]([COLOR=#FF00FF]RTRIM[/color](@ITEM))),3))
[COLOR=blue]INSERT[/color] [COLOR=blue]INTO[/color] SCHEDULE_DATA
(
MO,
ITEM,
[COLOR=green]--ORDER_QTY,
[/color] SCHED_DATE,
PRIORITY,
PASS,
LAST_UPDATE,
[COLOR=blue]COMMENT[/color],
COST_FMLY,
SCHEDULED_QTY,
[COLOR=green]--RUN_QTY,
[/color] STATUS,
SCHEDULED_LINE,
OTHER_SIDE,
REL_DTS
)
[COLOR=blue]VALUES[/color] (
@MO,
@ITEM,
[COLOR=green]--@ORDER_QTY,
[/color] @SCHED_DATE,
@PRIORITY,
@Pass,
[COLOR=#FF00FF]GETDATE[/color](),[COLOR=green]--THIS WILL BE THE SYSTEM DATE AND TIME
[/color] @COMMENT,
@COST_FMLY,
@SCHEDULED_QTY,
[COLOR=green]--@RUN_QTY,
[/color] @STATUS,
@SCHEDULED_LINE,
@OTHER_SIDE,
[COLOR=blue]CASE[/color] @STATUS
[COLOR=blue]WHEN[/color] 0 [COLOR=blue]THEN[/color] [COLOR=#FF00FF]GETDATE[/color]()
[COLOR=blue]WHEN[/color] 4 [COLOR=blue]THEN[/color] [COLOR=#FF00FF]GETDATE[/color]()
[COLOR=blue]ELSE[/color] NULL
[COLOR=blue]END[/color]
)
[COLOR=blue]END[/color]