2012-01-10 3 views
0

申し訳ありません私はこれに少しだけ新しくて、すべてをリンクして頭を上げようとしています。複数のストアドプロシージャを実行しているスクリプトに簡単なクエリをリンクする

現時点で私は通常のクエリがあります。SELECT FROM WHEREには、基本的に約2,000レコードが見つかり、いくつかのテーブルにまたがるリンクを更新する必要があります。

この単純なクエリを他のものにリンクする方法を教えてもらえますか?基本的に同じスクリプト内に複数のストアドプロシージャを実行できますか?しかし、私の単純なクエリによって返されたレコードにのみ影響しますか?

謝罪は、おそらく泥と同様に聞こえるでしょう!

* EDIT - 詳細*

だからここは私の選択クエリです:これは私が中に私は必要なすべてを更新するために、いくつかのストアドプロシージャをexecしたい返す行を使用して

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 

これらの行の変更によって影響を受けるデータベース。

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) 

答えて

1

あなたは私はあなたがどう思うか尋ねている場合 -

ストアドプロシージャは(ほとんど)任意の有効なSQL文を含めることができます。これには、複数の結果セットの返却、複数の更新の実行、およびその他のストアドプロシージャの呼び出しが含まれます。例えば

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 

は明らかにそれはむしろ人工的な例ですが、と仮定すると、すべてのオブジェクトは、それが完璧に実行したい存在しました。

0

あなたは自分の選択後にそれらを追加する必要があり、同時に複数のクエリを実行するために:1のストアドプロシージャの例は、私は約10これらのそうでない場合よりを実行する必要があるだろうと思い、以下の通りです。あなたが望むよう

だから、

Select * 
From table1 

Select * 
From table2 

Select * 
From table3 

何度でも行うことができ、それらはすべて独立して実行します。

あなたはSELECTに基づいて更新したい場合は、通常、ような何か:あなたは詳細を掲載場合、それは役立つだろうあなたのストアドプロシージャへに関して

UPDATE table1 
WHERE ID IN (SELECT ID FROM TABLE2) 

を。

+0

さらに詳しい情報はありますか、さらに必要な情報はありますか? – shicky

関連する問題