Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana Saya Menyalin Kumpulan Data, dan Mengubah Referensi FK untuk Menunjuk ke Semua Salinan?

Berikut adalah contoh dengan tiga tabel yang mungkin bisa membantu Anda memulai.

Skema DB

CREATE TABLE users
    (user_id int auto_increment PRIMARY KEY, 
     user_name varchar(32));
CREATE TABLE agenda
    (agenda_id int auto_increment PRIMARY KEY, 
     `user_id` int, `agenda_name` varchar(7));
CREATE TABLE events
    (event_id int auto_increment PRIMARY KEY, 
     `agenda_id` int, 
     `event_name` varchar(8));

SP untuk mengkloning pengguna dengan agenda dan catatan acaranya

DELIMITER $$
CREATE PROCEDURE clone_user(IN uid INT)
BEGIN
    DECLARE last_user_id INT DEFAULT 0;

    INSERT INTO users (user_name)
    SELECT user_name
      FROM users
     WHERE user_id = uid;

    SET last_user_id = LAST_INSERT_ID();

    INSERT INTO agenda (user_id, agenda_name)
    SELECT last_user_id, agenda_name
      FROM agenda
     WHERE user_id = uid;

    INSERT INTO events (agenda_id, event_name)
    SELECT a3.agenda_id_new, e.event_name
      FROM events e JOIN
    (SELECT a1.agenda_id agenda_id_old, 
           a2.agenda_id agenda_id_new
      FROM
    (SELECT agenda_id, @n := @n + 1 n 
       FROM agenda, (SELECT @n := 0) n 
      WHERE user_id = uid 
      ORDER BY agenda_id) a1 JOIN
    (SELECT agenda_id, @m := @m + 1 m 
       FROM agenda, (SELECT @m := 0) m 
      WHERE user_id = last_user_id 
      ORDER BY agenda_id) a2 ON a1.n = a2.m) a3 
         ON e.agenda_id = a3.agenda_id_old;
END$$
DELIMITER ;

Untuk mengkloning pengguna

CALL clone_user(3);

Inilah SQLFiddle demo.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL md5 hash berbeda dengan C# .NET md5

  2. Cara Membuat Pernyataan Drop Table untuk semua tabel dalam database - Tutorial SQL Server / T-SQL Bagian 48

  3. Bagaimana Saya Menyalin Kumpulan Data, dan Mengubah Referensi FK untuk Menunjuk ke Semua Salinan?

  4. Penggunaan SqlParameter dalam klausa SEPERTI SQL tidak berfungsi

  5. Kembalikan jumlah baris yang terpengaruh oleh pernyataan UPDATE