2012-05-25 5 views
0

У меня есть следующие данные в таблице TABLE1INSERT/UPDATE/DELETE каждой строки SQL

SessionID 
S1 
S2 
S3 

У меня есть следующие данные в другой TABLE2

EmployeeID | Session 
1   | NULL 
2   | NULL 
3   | NULL 

Что я хотел бы сделать, это обновление/Вставка каждой строки пример

UPDATE table2 SET Session= (SELECT SessionID FROM TABLE1) 
INSERT INTO(COPY each row and insert 2nd row session id from table1) 

Ожидаемый результат: table2

EmployeeID | Session 
1   | S1 
2   | S1 
3   | S1 
1   | S2 
2   | S2 
3   | S2 
1   | S3 
2   | S3 
3   | S3 

Любое понимание поможет.

спасибо.

ответ

2

Похоже, вы хотите, чтобы строка в таблице 2 для каждой комбинации каждой строки в настоящее время находилась в таблице 2 и каждой строке в таблице 1. Если так ...

BEGIN TRAN 

SELECT * INTO #temp FROM TABLE2 

DELETE TABLE2 

INSERT TABLE2 
(
    EmployeeID, 
    Session 
) 
SELECT 
    temp.EmployeeID, 
    TABLE1.SessionID 
FROM TABLE1 CROSS JOIN #temp temp 

DROP #TEMP 

COMMIT TRAN 
+0

спасибо за ваш быстрый ответ. –

+0

Привет, Даниэль, ваш путь - это работы. но я сталкиваюсь с проблемой первичного ключа. в таблице2 мой employeeid является первичным ключом. Так что я попытался сделать сеанс и идентификатор сотрудника в качестве ключа-кандидата, но он завершился неудачно, потому что мой сеанс таблицы 2 равен нулю. любое предложение? –

+0

Если 'EmployeeID' должен быть основным ключом' TABLE2', вы просто не можете делать то, что хотите, поскольку для этого потребуются дубликаты значений в этом столбце. Если вы можете удалить текущий ключ и заменить его на новый составной ключ, который будет содержать «EmployeeID» и «Session», то он будет работать до тех пор, пока у вас никогда не будет повторяющихся значений «Session» для того же «EmployeeID». Вы сможете получить одно значение NULL * за * 'EmployeeID', но не более того. –

1

Я предлагаю создать отдельный стол сотрудника. Чтобы вставить данные в свой EmployeeSession (TABLE2):

INSERT INTO EmployeeSession (EmployeeID, SessionID) 
    SELECT Employee.ID, [Session].ID 
    FROM Employee, [Session] 
+0

спасибо, но я думаю, что ответ Даниэля более подходит для моей ситуации –

0

Я думаю, что MERGE заявление помогает:

MERGE INTO TABLE2 t2 
    USING (SELECT t2.EmployeeID, t1.SessionID 
FROM TABLE2 t2 
CROSS JOIN TABLE1 t1) t 
     ON t2.EmployeeID = t.EmployeeID AND t2.Session = t.SessionID 
    WHEN NOT MATCHED BY TARGET THEN 
     INSERT (EmployeeID, Session) VALUES(t.EmployeeID, t.SessionID) 
    WHEN NOT MATCHED BY SOURCE THEN 
     DELETE 
; 
Смежные вопросы