Solved

Conditional Stored procedures

Posted on 2009-06-30
7
196 Views
Last Modified: 2012-05-07
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.
0
Comment
Question by:VBBRett
  • 3
  • 2
  • 2
7 Comments
 
LVL 75

Expert Comment

by:Aneesh Retnakaran
ID: 24746047

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
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 24746081
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
 

Author Comment

by:VBBRett
ID: 24746274
angelll, can you give me an example of the update + insert conditional statement?
0
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 24746410
you did not look into the link, did you?
the code is there.
0
 

Author Comment

by:VBBRett
ID: 24746549
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
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 24746630
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
 
LVL 75

Accepted Solution

by:
Aneesh Retnakaran earned 500 total points
ID: 24751251
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

Featured Post

Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
SSIS how to COMPARE a data column from different servers? 6 110
Stored procedure 4 36
How to query LOCK_ESCALATION 4 42
Insert from Stored Procedure where some field/s > 0 7 45
Introduction This article will provide a solution for an error that might occur installing a new SQL 2005 64-bit cluster. This article will assume that you are fully prepared to complete the installation and describes the error as it occurred durin…
Data architecture is an important aspect in Software as a Service (SaaS) delivery model. This article is a study on the database of a single-tenant application that could be extended to support multiple tenants. The application is web-based develope…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question