Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Kaskadowa kopia wierszy w sql

Możesz użyć scal instrukcja z klauzulą ​​output, aby uzyskać dopasowanie między starym i nowym identyfikatorem w questionText. Jest to opisane w tym pytaniu Korzystanie z merge..output, aby uzyskać mapowanie między source.id i target.id .

W twoim przypadku kod wyglądałby mniej więcej tak. Kod nie jest testowany, więc może być w nim wiele literówek, ale pokazuje, co możesz zrobić.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać SQL Server Compact Edition (CE) z Javy?

  2. Czy występuje problem z wydajnością podczas korzystania z funkcji ISNULL() w programie SQL Server?

  3. SQL RANK() a ROW_NUMBER()

  4. SQL Server 2008 — Zaawansowane wyszukiwanie/sortowanie

  5. Jak utworzyć pole logiczne tak/nie na serwerze SQL?