Хранимая процедура для дублирования основных данных - PullRequest
2 голосов
/ 03 апреля 2012

Я - новые хранимые процедуры и пытаюсь написать процедуру для дублирования основных данных пользователя (по user_id) в новые данные пользователя.Вот моя структура таблицы.Я передам целевой user_id и целевой user_id хранимой процедуре.Не могли бы вы сообщить мне, как добиться этой функциональности?Я ценю любую помощь.

TABLE A
----------------
a_id       int(Primary Key)  
desc       varchar(50)
user_id    int

TABLE B
-----------------
b_id       int(Primary Key)
a_id       int(Foreign Key)
detail     varchar(100)

CREATE PROCEDURE [duplicate_user_data] 
    @old_user_id int,
    @new_user_id int
AS
BEGIN
    INSERT INTO TABLEA
           ([desc]
           ,[user_id]
           )
    select desc, user_id from TABLEA where user_id = @old_user_id
END

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Вы можете использовать самосоединение для сопоставления старого и нового родительских идентификаторов.

CREATE PROCEDURE [duplicate_user_data] 
    @old_user_id int,
    @new_user_id int
AS
    INSERT INTO TableA ([desc], [user_id])
    SELECT [desc], @new_user_id
    FROM TableA
    WHERE [user_id] = @old_user_id

    INSERT INTO TableB ([a_id], [detail])
    SELECT NewTableA.[a_id], TableB.[detail]
    FROM TableA AS NewTableA
    CROSS JOIN TableA AS OldTableA
    JOIN TableB ON TableB.[a_id] = OldTableA.[a_id]
    WHERE NewTableA.[user_id] = @new_user_id
    AND OldTableA.[user_id] = @old_user_id
0 голосов
/ 03 апреля 2012

если я вас правильно понимаю, вы хотите вставить новую запись для нового пользователя, но скопировать данные от другого пользователя.Если это так, то вы можете сделать что-то вроде этого:

CREATE PROCEDURE [duplicate_user_data] 
    @old_user_id int,
    @new_user_id int
AS
BEGIN
    declare @old_a_id int

    -- get the old a_id first
    SELECT @old_a_id = a_id
    FROM TableA
    WHERE [user_id] = @old_user_id

    -- insert the new record into TableA
    INSERT INTO TABLEA
    (
        [desc]
        ,[user_id]
    )
    select [desc]
        , @new_user_id 
    from TABLEA 
    where [user_id] = @old_user_id

    -- insert new record into tableB using the @old_a_id 
    INSERT INTO TableB
    (
        a_id
        , detail
    )
    SELECT @old_a_id
        , detail
    FROM TableB
    WHERE a_id = @old_a_id
END

Это тогда вставит ваш new_user_id в TableA, но будет иметь [desc] от вашего old_user_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...