2012-01-10 1 views
1

Итак, я использую курсор для циклического переноса множества записей, возвращаемых моим запросом. Я только что обновил некоторые детали в таблице, и теперь я хочу вытащить детали из этой таблицы, поэтому я использовал временную таблицу.Табличные переменные SQL для вставки в другую таблицу с дополнительными значениями

Итак, теперь я хочу вставить некоторые значения в новую таблицу, не связанную с последней, а затем остальные значения будут прямой копией из переменной таблицы ... как я могу это сделать?

Я расскажу ниже в этом разделе, чтобы помочь людям увидеть, что я пытаюсь сделать. Соответствующая деталь находится между комментарием состояния обновления и указанным выше недопустимым комментарием.

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

Я думаю, что это будет хорошим примером для инструкции INSERT INTO SELECT,

Что-то вроде

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

В основном вы пропустите временную таблицу, а просто взять значение и ввести все в один раз.

+0

Спасибо, Митчел, я не знал, что это возможно – shicky

Смежные вопросы