2012-01-10 16 views
1

カーソルを使用して、クエリから返される一連のレコードをループします。私はちょうどテーブルのいくつかの詳細を更新したので、私は一時テーブルを使用しているので、そのテーブルから詳細を取得したいと思います。別のテーブルに追加の値で挿入するSQLテーブル変数

これで、最後に関係のない新しいテーブルにいくつかの値を挿入し、残りの値がテーブル変数からの直接コピーになるようにしたいのですが、どうすればいいですか?

私は何をしようとしているのかを人々に見てもらうため、このセクションの下に投稿します。 該当する部分は、更新ステータスコメントと上記の終了していないコメントの間にあります。

私は、これは基本的にあなたが一時テーブルをスキップして、値だけをつかむと、にすべてを注入

INSERT INTO MyTable (ColA, ColB, ColC) 
SELECT 
    GETDATE(), A.MyCol, 'MyValue' 
FROM MyOtherTable A 
WHERE a.MyValue = 'What I Want' 

よう

何かINSERT INTO SELECT文のために良いケースだと思う

OPEN cur 
FETCH NEXT FROM cur INTO @MembershipTermID , @EndDate , @MembershipID <VARIABLES> 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    --PERFORM ACTION 
    DECLARE @TodaysDate DATETIME 
    SET @TodaysDate = getDate() 

    --CANCEL DETAIL 
    DECLARE @CancellationDetailID INT 
    INSERT INTO CancellationDetail(CancellationDetailID,RefundAmount,OldEndDate,EffectiveDate,CancelDate,ReasonCodeProgKey) 
    VALUES (0, 0.0, @EndDate, @TodaysDate, @TodaysDate, 'CANC_DORMANT') 
    SELECT @CancellationDetailID = SCOPE_IDENTITY()  
    INSERT INTO CancellationDetailAudit(StampUser,StampDateTime,StampAction,CancellationDetailID,RefundAmount,OldEndDate,EffectiveDate,CancelDate,ReasonCodeProgKey) 
    VALUES('SYSTEM', GetDate(), 'I', @CancellationDetailID, 0.0, @EndDate, @TodaysDate, @TodaysDate, 'CANC_DORMANT') 

    --LINK TO TERM 
    INSERT INTO MembershipTermCancellationDetail(CancellationDetailID,MembershipTermID) 
    VALUES(@CancellationDetailID, @MembershipTermID) 
    INSERT INTO MembershipTermCancellationDetailAudit(StampUser,StampDateTime,StampAction,MembershipTermCancellationDetailID,CancellationDetailID,MembershipTermID) 
    VALUES('SYSTEM', GetDate(), 'I', 0, @CancellationDetailID, @MembershipTermID) 

    --UPDATE STATUS 
    UPDATE MembershipTerm 
    SET MemberStatusProgKey = 'CANCELLED', 
    EndDate = @TodaysDate, 
    UpdateDateTime = @TodaysDate, 
    AgentID = 224, 
    NextTermPrePaid = 'False' 
    WHERE MembershipTermID = @MembershipTermID 

    DECLARE @MembershipTermTable TABLE 
    (
    MembershipTermID int, 
    MemberStatusProgKey nvarchar (50), 
    StartDate datetime, 
    EndDate datetime, 
    AdditionalDiscount float, 
    EntryDateTime datetime, 
    UpdateDateTime datetime, 
    MembershipID int, 
    AgentID smallint, 
    PlanVersionID int, 
    ForceThroughReference nvarchar (255), 
    IsForceThrough bit, 
    NextTermPrePaid bit, 
    IsBillingMonthly bit, 
    LastPaymentDate datetime, 
    PaidToDate datetime, 
    IsIndeterminate bit 
    ) 

    INSERT INTO @MembershipTermTable 
    SELECT MembershipTermID, 
    MemberStatusProgKey, 
    StartDate, 
    EndDate, 
    AdditionalDiscount, 
    EntryDateTime, 
    UpdateDateTime, 
    MembershipID, 
    AgentID, 
    PlanVersionID, 
    ForceThroughReference, 
    IsForceThrough, 
    NextTermPrePaid, 
    IsBillingMonthly, 
    LastPaymentDate, 
    PaidToDate, 
    IsIndeterminate 
    FROM MembershipTerm 
    WHERE MembershipTermID = @MembershipTermID 

    INSERT INTO MembershipTermAudit(StampUser,StampDateTime,StampAction,MembershipTermID,MemberStatusProgKey,StartDate,EndDate,AdditionalDiscount,EntryDateTime,UpdateDateTime,MembershipID,AgentID,PlanVersionID,ForceThroughReference,IsForceThrough,NextTermPrePaid,IsBillingMonthly,LastPaymentDate,PaidToDate,IsIndeterminate) 
    VALUES ('SYSTEM',@TodaysDate,'I',MembershipTermID,MemberStatusProgKey,StartDate,EndDate,AdditionalDiscount,EntryDateTime,UpdateDateTime,MembershipID,AgentID,PlanVersionID,ForceThroughReference,IsForceThrough,NextTermPrePaid,IsBillingMonthly,LastPaymentDate,PaidToDate,IsIndeterminate) 
    --ABOVE NOT FINISHED, NEED TO ADD AUDIT RECORD CORRECTLY 

    --Members 
    DECLARE @MembersTable TABLE 
    (
    MembershipTermID int, 
    MemberStatusProgKey nvarchar (50), 
    StartDate datetime, 
    EndDate datetime, 
    AdditionalDiscount float, 
    EntryDateTime datetime, 
    UpdateDateTime datetime, 
    MembershipID int, 
    AgentID smallint, 
    PlanVersionID int, 
    ForceThroughReference nvarchar (255), 
    IsForceThrough bit, 
    NextTermPrePaid bit, 
    IsBillingMonthly bit, 
    LastPaymentDate datetime, 
    PaidToDate datetime, 
    IsIndeterminate bit 
    ) 

    INSERT INTO @MembersTable 
    SELECT * FROM [MembershipTermPerson] WHERE MembershipTermID = @MembershipTermID 


    --Vehicles 





    FETCH NEXT FROM cur INTO @MembershipTermID , @EndDate , @MembershipID <VARIABLES> 
END 

CLOSE cur 
DEALLOCATE cur 

答えて

3

一度。

+0

ミッチェルありがとう、私はこれが可能であることを知らなかった – shicky

関連する問題