shicky
shicky

Reputation: 2126

Linking a simple query to a script executing several stored procedures

Sorry I'm a bit new to this so just trying to get my head around linking everything up.

At the moment I have a normal query - SELECT FROM WHERE which basically finds about 2000 records that I need to update which link across several tables.

Can someone tell me how I can link this simple query to something else so I can basically execute several stored procedures, all in the same script? But only affecting the records returned by my simple query?

Apologies, that probably sounds as clear as mud!

*EDIT - MORE DETAIL *

So here is my Select query:

SELECT [MembershipTermID]
,[MemberStatusProgKey]
,[StartDate]
,[EndDate]
,[AdditionalDiscount]
,[EntryDateTime]
,[UpdateDateTime]
,[MembershipID]
,[AgentID]
,[PlanVersionID]
,[ForceThroughReference]
,[IsForceThrough]
,[NextTermPrePaid]
,[IsBillingMonthly]
,[CICSMEMBERNUM]
,[CICSHISTORY]
,[TMPSeqNoColumn]
,[LastPaymentDate]
,[PaidToDate]
,[IsIndeterminate]
,DATEDIFF(MONTH, PaidToDate, GETDATE()) as MonthsDifference
,dbo.FullMonthsSeparation (PaidToDate, GETDATE())
FROM [Apollo].[dbo].[MembershipTerm] 
WHERE MemberStatusProgKey='DORMANT' 
AND IsBillingMonthly=1 
AND dbo.FullMonthsSeparation (PaidToDate, GETDATE()) >= 2

So using the rows that this returns I want to exec several stored procedures to update everything I need to in the database which would be affected by changing these rows. An example of one stored procedure is below, I think I will need to execute about 10 of these if not more:

USE [Apollo]
GO
/****** Object:  StoredProcedure [dbo].[spCancellationDetailInsert]    Script Date:       01/10/2012 10:21:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

/* ************************* INSERT *************************/
/* Auto Generated 11/29/2006 7:28:53 PM by Object Builder */
/* ************************* INSERT *************************/


 ALTER Procedure [dbo].[spCancellationDetailInsert]
@StampUser char (10),
    @CancellationDetailID int,
    @RefundAmount float,
    @OldEndDate datetime,
    @EffectiveDate datetime,
    @CancelDate datetime,
    @ReasonCodeProgKey nvarchar (50)

As



/* insert CancellationDetail record     */
Insert [CancellationDetail]
(
    RefundAmount,
    OldEndDate,
    EffectiveDate,
    CancelDate,
    ReasonCodeProgKey
)
Values
(
    @RefundAmount,
    @OldEndDate,
    @EffectiveDate,
    @CancelDate,
    @ReasonCodeProgKey
)
If @@Error <> 0 GoTo InsertErrorHandler

/* save the key of the new row created by the insert */
Select @CancellationDetailID = Scope_Identity()

/* add audit record  */
Insert CancellationDetailAudit
(StampUser,
StampDateTime,
StampAction,
CancellationDetailID,
RefundAmount,
OldEndDate,
EffectiveDate,
CancelDate,
ReasonCodeProgKey)

Values
(@StampUser ,
GetDate() ,
'I',
@CancellationDetailID,
@RefundAmount,
@OldEndDate,
@EffectiveDate,
@CancelDate,
@ReasonCodeProgKey)

If @@Error <> 0 GoTo AuditInsertErrorHandler

Select
 CancellationDetailID = @CancellationDetailID

Return (0)
InsertErrorHandler:
Raiserror ('SQL Error whilst inserting CancellationDetailrecord: Error Code %d',17,1,@@Error)
With Log
Return  (99)

AuditInsertErrorHandler:
Raiserror ('SQL Error whilst inserting audit record for CancellationDetailInsert: Error Code %d',17,1,@@Error)
With Log
Return  (99)

Upvotes: 0

Views: 120

Answers (2)

eftpotrm
eftpotrm

Reputation: 2271

If you're asking what I think you are -

Stored procedures can contain (pretty much) any valid SQL statement. This includes returning multiple results sets, performing multiple updates and calling other stored procedures.

For example:

CREATE PROCEDURE usp_Sample AS

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
SELECT * FROM INFORMATION_SCHEMA.TABLES

UPDATE Users SET Active = 0 WHERE ExpiredDate < GetDate()

SELECT Active, COUNT(*) FROM Users GROUP BY Active

EXEC usp_Sample2

GO

Obviously that's a rather artificial example, but assuming all the objects existed it'd run perfectly well.

Upvotes: 1

m.edmondson
m.edmondson

Reputation: 30892

In order to perform more queries at the same time you just need to append them after your select.

So you can do

Select *
From table1

Select *
From table2

Select *
From table3

as many times as you want and they'll all execute independently.

If you want to UPDATE based on a SELECT you usually do something like:

UPDATE table1
WHERE ID IN (SELECT ID FROM TABLE2)

with regards to your stored procedures it would help if you posted more details.

Upvotes: 0

Related Questions