Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मैं डेटा के एक सेट की डीप कॉपी कैसे करूं, और सभी प्रतियों को इंगित करने के लिए FK संदर्भों को कैसे बदलूं?

यहां तीन तालिकाओं वाला एक उदाहरण दिया गया है जो संभवत:आपको प्रारंभ कर सकता है।

डीबी स्कीमा

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));

एक एसपी एक उपयोगकर्ता को अपने एजेंडे और घटनाओं के रिकॉर्ड के साथ क्लोन करने के लिए

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 ;

किसी उपयोगकर्ता को क्लोन करने के लिए

CALL clone_user(3);

यह रहा SQLFiddle डेमो।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Driver.getConnection SQLServer ड्राइवर और Java का उपयोग करके हैंग हो जाता है 1.6.0_29

  2. कैसे जांचें कि SQL सर्वर तालिका में कोई कॉलम मौजूद है या नहीं?

  3. टी-एसक्यूएल का उपयोग करके SQL सर्वर में उपयोगकर्ता-परिभाषित डेटा प्रकार उपनाम कैसे बनाएं?

  4. टीएसक्यूएल में बढ़ती तिथियों का परिणाम उत्पन्न करें

  5. SQL सर्वर - सभी गैर-मुद्रण योग्य ASCII वर्णों को हटा दें