sql >> データベース >  >> RDS >> Sqlserver

SQLの行のカスケードコピー

    マージ を使用できます questionText の古い ID と新しい ID の一致を取得する output 句を含むステートメント。これはこの質問 merge..output を使用して source.id と target.id 間のマッピングを取得する .

    あなたの場合、コードは次のようになります。コードはテストされていないため、タイプミスがいくつかあるかもしれませんが、何ができるかを示しています。

    create procedure CopyQuestion
      @idtocopy int
    as
    
    declare @QuestionID int
    
    insert into question
    select Name 
    from question 
    where ID = @idtocopy
    
    select @QuestionID = scope_identity() 
    
    declare @IDs table (NewQID int, OldQID int)
    
    merge questionText as T
    using (select ID, @QuestionID as QuestionID, Field
           from questionText
           where QuestionID = @idtocopy) as S
    on 0=1
    when not matched then
      insert (QuestionID, Field) values (QuestionID, Field)
    output inserted.ID, S.ID   into @IDs;       
    
    insert into options
    select 
        I.NewQID,
        O.Field
    from options O
      inner join @IDs as I
        on O.QuestionTextID = I.OldQID
      

    1. postgresql:注文された結果

    2. SQL:特定の日付の時間範囲で作成されたレコードを取得します

    3. 長時間実行されるクエリについてOracleデータベースをチェックする方法

    4. phpはデータをmysqlに保存しません