2014-11-19 4 views
0

Я выбираю данные из таблицы и вставляю их в другую, если данные в этой таблице не существуют.Обновление таблицы вместо Insert Into

DECLARE @EmployeeNumber NVARCHAR(100) 
SET @EmployeeNumber = 'Emp001' 
IF EXISTS(SELECT E.EmployeeNumber FROM [databaseOne].[dbo].[Employee] E WHERE E.EmployeeNumber = @EmployeeNumber) 
BEGIN 
IF NOT EXISTS(SELECT UT.EmployeeNumber FROM UserTable UT WHERE UT.EmployeeNumber = @EmployeeNumber) 
BEGIN 
    INSERT INTO UserTable(EmployeeNumber, Surname) 
    SELECT E.EmployeeNumber, E.Surname FROM [databaseOne].[dbo].[Employee] E 
    WHERE E.EmployeeNumber = @EmployeeNumber 
END 
ELSE 
    BEGIN 
     --Update 
    END 
END 

Если данные существуют, я просто хочу обновить существующие данные.

Как можно обновить, в отличие от INSERT INTO.

Сердечные приветы

+4

Посмотрите на [MERGE] (http://msdn.microsoft.com/en-us/library/bb510625%28v=sql.100% 29.aspx), он используется для условного удаления, вставки или обновления. – jpw

ответ

3

Вы должны использовать Merge несильно.

Ваш запрос будет выглядеть примерно так:

MERGE UserTable AS Target 
USING (SELECT E.EmployeeNumber, E.Surname FROM [databaseOne].[dbo].[Employee] E 
     WHERE EmployeeNumber = @EmployeeNumber) AS Source 
ON Target.EmployeeNumber = Source.EmployeeNumber 
WHEN MATHCED THEN 
    UPDATE SET Target.Surname = Source.Surname 
WHEN NOT MATCHED THEN 
    INSERT (EmployeeNumber, Surname) VALUES (Source.EmployeeNumber,Source.Surname); 

См here.

1

Попробуйте что-то вдоль линий:

UPDATE UserTable 
SET 
EmployeeNumber=E.EmployeeNumber 
Surname=E.Surname 
FROM UserTable 
INNER JOIN [databaseOne].[dbo].[Employee] AS E 
ON (E.EmployeeNumber = UserTable.EmployeeNumber) 
WHERE UserTable.EmployeeNumber = @EmployeeNumber 
Смежные вопросы