shicky
shicky

Reputation: 2126

SQL Table Variables to insert into a different table with additional values

So I am using a cursor to loop through a bunch of records that my query returns. I have just updated some details in a table and now I want to pull the details from that table so I have used a temporary table.

So now I want to insert some values into a new table that are unrelated to the last and then the rest of the values would be a direct copy from the table variable...how can I do this?

I'll post below the section in question to help people see what I am trying to do. The part in question is between the update status comment and the above not finished comment.

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

Upvotes: 1

Views: 1241

Answers (1)

Mitchel Sellers
Mitchel Sellers

Reputation: 63136

I think this would be a good case for a INSERT INTO SELECT statement

Something like

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

Basically you skip the temp table, and just grab the value and inject everything at once.

Upvotes: 3

Related Questions