Sql 将简单查询链接到执行多个存储过程的脚本

Sql 将简单查询链接到执行多个存储过程的脚本,sql,sql-server,Sql,Sql Server,对不起,我对这个有点陌生,所以我只是想把所有的事情联系起来 目前,我有一个普通的查询-从何处选择,它基本上可以找到大约2000条记录,我需要更新几个表中的哪个链接 有人能告诉我如何将这个简单的查询链接到其他内容,以便基本上可以在同一个脚本中执行多个存储过程吗?但只影响我的简单查询返回的记录 抱歉,这听起来很清楚 *编辑-更多详细信息* 下面是我的选择查询: SELECT [MembershipTermID] ,[MemberStatusProgKey] ,[StartDate] ,[EndDat

对不起,我对这个有点陌生,所以我只是想把所有的事情联系起来

目前,我有一个普通的查询-从何处选择,它基本上可以找到大约2000条记录,我需要更新几个表中的哪个链接

有人能告诉我如何将这个简单的查询链接到其他内容,以便基本上可以在同一个脚本中执行多个存储过程吗?但只影响我的简单查询返回的记录

抱歉,这听起来很清楚

*编辑-更多详细信息*

下面是我的选择查询:

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
因此,使用返回的行,我希望执行几个存储过程来更新数据库中需要更新的所有内容,这些内容将受到更改这些行的影响。下面是一个存储过程的示例,我想我需要执行其中的10个(如果不是更多的话):

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)

为了同时执行更多查询,您只需在选择后追加查询

所以你可以

Select *
From table1

Select *
From table2

Select *
From table3
你想要多少次,他们都会独立执行

如果要根据选择更新,通常会执行以下操作:

UPDATE table1
WHERE ID IN (SELECT ID FROM TABLE2)

关于您的存储过程,如果您发布更多详细信息,将会有所帮助。

如果您询问我认为您是什么-

存储过程几乎可以包含任何有效的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
显然,这是一个相当人工的例子,但假设所有对象都存在,它会运行得非常好