Click here to Skip to main content
11,639,520 members (68,950 online)
Click here to Skip to main content

Tagged as

Combining Insert/Update to one Procedure

, 14 Jul 2010 CPOL 25.6K 14
Rate this:
Please Sign up or sign in to vote.
Why do developers insist on separate procedures to do these jobs
I can never understand why developers have both an Insert and an Update procedure, they do basically the same thing. If you combine them, you reduce the CRUD procedures by 25%, your DAL has 1 less method and management is simpler.

By simply managing the ID field(s), you can combine these operations into 1 procedure.
ALTER PROC [APExclusionUpdate]
--Declare
  @ExclID INT,
  @EntityID INT,
  @AttrTypeID INT,
  @APLinkID INT,
  @Modified DATETIME,
  @ModifiedBy VARCHAR(100)
AS
 
-------------------- Created by Classbuilder -----------
 
IF ISNULL(@ExclID, 0) = 0 -- decide to Insert based on ID
  BEGIN
    INSERT  INTO APExclusion
            (EntityID,
             AttrTypeID,
             APLinkID,
             Modified,
             ModifiedBy
            )
    VALUES
            (@EntityID,
             @AttrTypeID,
             @APLinkID,
             @Modified,
             @ModifiedBy
            )
    SELECT
      SCOPE_IDENTITY() AS ExclID -- return the new ID value
  END
ELSE 
  BEGIN
    UPDATE
      APExclusion
    SET
      EntityID = @EntityID,
      AttrTypeID = @AttrTypeID,
      APLinkID = @APLinkID,
      Modified = @Modified,
      ModifiedBy = @ModifiedBy
    WHERE
      ExclID = @ExclID
    SELECT
      @ExclID AS ExclID -- return the passed in ID value
  END

This procedure decides whether to insert or update the record based on the ID fields. You can either return the ID or the new/updated record. I generally return the ID.

I have used this with both identity and GUID primary keys, GUID requires a bit more management.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Mycroft Holmes
Software Developer (Senior) Contractor
Singapore Singapore
Started my programming life writing Excel 1.0 macros, God what a long time ago.

Now I'm a dotnet developer, I get to influence direction, play with new toys, build stuff, life is wonderful.

Greatest buzz you can get, walk past a row of desks and see your application running on all of them (and getting paid).

Greatest irritant, pouring 12 months of knowledge and experience into an empty head only to have it leave.

You may also be interested in...

Comments and Discussions

 
GeneralReason for my vote of 5 Classic solution ...thnx bro Pin
Ravindra_Parcha23-Jan-12 7:20
memberRavindra_Parcha23-Jan-12 7:20 
GeneralFor those of you that "don't get it", you should read Spaanj... Pin
EngleA12-Apr-11 7:54
memberEngleA12-Apr-11 7:54 
GeneralReason for my vote of 2 I don't get it. You wouldn't combine... Pin
dmjm-h12-Apr-11 6:05
memberdmjm-h12-Apr-11 6:05 
GeneralRe: What makes you think an update and an insert have different ... Pin
Mycroft Holmes12-Apr-11 12:12
memberMycroft Holmes12-Apr-11 12:12 
GeneralI don't have any reason for separating the 2 methods In the ... Pin
Mycroft Holmes4-Apr-11 19:10
memberMycroft Holmes4-Apr-11 19:10 
GeneralRe: you can still do that in one procedure. Instead of SELECT S... Pin
EngleA12-Apr-11 7:53
memberEngleA12-Apr-11 7:53 
GeneralReason for my vote of 3 - Multiple interpretation of the sam... Pin
Jani Giannoudis4-Apr-11 18:14
mvpJani Giannoudis4-Apr-11 18:14 
GeneralReason for my vote of 3 Reduces the numbers of SP on server ... Pin
Sunnyonfire4-Apr-11 7:51
memberSunnyonfire4-Apr-11 7:51 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.150731.1 | Last Updated 14 Jul 2010
Article Copyright 2010 by Mycroft Holmes
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid