Conditional Stored procedures

I am looking for a way to insert data into a table but if there is already a record there with the same employeeid or userid, I want it to be an update.  How would I do this in a stored procedure?  Thank you for your help ahead of time.
VBBRettAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Aneesh RetnakaranDatabase AdministratorCommented:

create procedure testSp
@EmployeeID int
AS
BEGIN
SET NOCOUNT ON
INSERT INTO urTable  (EmployeeID)
SELECT @EmployeeID
WHERE NOT EXISTS (SELECT 1 FROM urTable WHERE EmployeeID = @EmployeeID )
IF @@ROWCOUNT = 0
  UPDATE urTable
 SET ColumnName = Value
 WHERE EmployeeID = @EmployeeID
END
0
Guy Hengel [angelIII / a3]Billing EngineerCommented:
here you have a comparison of the 2 possible methods:
http://weblogs.sqlteam.com/mladenp/archive/2007/07/30/60273.aspx

I usually go with the  UPDATE + INSERT, and not with the EXISTS method...
0
VBBRettAuthor Commented:
angelll, can you give me an example of the update + insert conditional statement?
0
IT Pros Agree: AI and Machine Learning Key

We’d all like to think our company’s data is well protected, but when you ask IT professionals they admit the data probably is not as safe as it could be.

Guy Hengel [angelIII / a3]Billing EngineerCommented:
you did not look into the link, did you?
the code is there.
0
VBBRettAuthor Commented:
Here is my insert statement.  How would I change this to a conditional insert statement, or update if there is a record?  See the code below:  Thanks!
USE [EmployeeS2]
GO
/****** Object:  StoredProcedure [dbo].[EmployeeS2Answers]    Script Date: 06/30/2009 11:48:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Me>
-- Create date: <06/25/09>
-- Description:	<This procedure enters question 
--information into EmployeeS2 Table in the
-- Employee database
-- =============================================
ALTER PROCEDURE [dbo].[EmployeeScreeningAnswers]
		@EmployeeId		int,
		@Question1		bit,
		@Question2		bit,
		@Question3		bit,
		@Question4		bit,
		@Question5		bit,
		@Question6		bit,	
		@Question7		bit,
		@Question8		bit,
		@Question9		bit,
		@Question10		bit,
		@Question11		bit,
		@Question12		bit,
		@Question13		bit,
		@Question14		bit,
		@Question15		bit,	
		@Question16		bit,		
		@LastUpdate		datetime,
		@LastUpdateBy	nvarchar
			
AS
BEGIN
 
	INSERT INTO [dbo].[EmployeeS2](EmployeeId, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9,
Q10, Q11, Q12, Q13, Q14, Q15, Q16, LastUpdate, LastUpdateBy)
VALUES (@EmployeeId, @Question1, @Question2, @Question3, @Question4, @Question5, @Question6,
@Question7, @Question8, @Question9, @Question10, @Question11, @Question12, @Question13, 
@Question14, @Question15, @Question16, @LastUpdate, @LastUpdateBy)
 
END

Open in new window

0
Guy Hengel [angelIII / a3]Billing EngineerCommented:
presuming employeeid is the primary key...
ALTER PROCEDURE [dbo].[EmployeeScreeningAnswers]
		@EmployeeId		int,
		@Question1		bit,
		@Question2		bit,
		@Question3		bit,
		@Question4		bit,
		@Question5		bit,
		@Question6		bit,	
		@Question7		bit,
		@Question8		bit,
		@Question9		bit,
		@Question10		bit,
		@Question11		bit,
		@Question12		bit,
		@Question13		bit,
		@Question14		bit,
		@Question15		bit,	
		@Question16		bit,		
		@LastUpdate		datetime,
		@LastUpdateBy	nvarchar
			
AS
BEGIN
UPDATE [dbo].[EmployeeS2]
     SET Question1 = @Question1
       , Question2 = @Question2
       ... etc ...
  WHERE EmployeeId = @EmployeeId
IF @@ROWCOUNT = 0
BEGIN 
	INSERT INTO [dbo].[EmployeeS2](EmployeeId, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9,
Q10, Q11, Q12, Q13, Q14, Q15, Q16, LastUpdate, LastUpdateBy)
VALUES (@EmployeeId, @Question1, @Question2, @Question3, @Question4, @Question5, @Question6,
@Question7, @Question8, @Question9, @Question10, @Question11, @Question12, @Question13, 
@Question14, @Question15, @Question16, @LastUpdate, @LastUpdateBy)
END
END

Open in new window

0
Aneesh RetnakaranDatabase AdministratorCommented:
something like this

USE [EmployeeS2]
GO
/****** Object:  StoredProcedure [dbo].[EmployeeS2Answers]    Script Date: 06/30/2009 11:48:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Me>
-- Create date: <06/25/09>
-- Description:	<This procedure enters question 
--information into EmployeeS2 Table in the
-- Employee database
-- =============================================
ALTER PROCEDURE [dbo].[EmployeeScreeningAnswers]
		@EmployeeId		int,
		@Question1		bit,
		@Question2		bit,
		@Question3		bit,
		@Question4		bit,
		@Question5		bit,
		@Question6		bit,	
		@Question7		bit,
		@Question8		bit,
		@Question9		bit,
		@Question10		bit,
		@Question11		bit,
		@Question12		bit,
		@Question13		bit,
		@Question14		bit,
		@Question15		bit,	
		@Question16		bit,		
		@LastUpdate		datetime,
		@LastUpdateBy	nvarchar
			
AS
BEGIN
SET NOCOUNT 
INSERT INTO [dbo].[EmployeeS2](EmployeeId, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9,
				Q10, Q11, Q12, Q13, Q14, Q15, Q16, LastUpdate, LastUpdateBy)
SELECT @EmployeeId, @Question1, @Question2, @Question3, @Question4, @Question5, @Question6,
		@Question7, @Question8, @Question9, @Question10, @Question11, @Question12, @Question13, 
		@Question14, @Question15, @Question16, @LastUpdate, @LastUpdateBy
WHERE NOT EXISTS (SELECT 1 FROM [dbo].[EmployeeS2] WHERE EmployeeID = @EmployeeId )
IF @@ROWCOUNT = 0 
	UPDATE [dbo].[EmployeeS2]
	SET Q1 = @Question1, 
	    Q2 = @Question2,...
	EmployeeID = @EmployeeId		
 
END 

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft SQL Server 2005

From novice to tech pro — start learning today.