2015-04-03 2 views
0

Попытка создать хранимую процедуру для вставки или обновления записей в зависимости от поля.Неправильный синтаксис рядом с ключевым словом 'WHEN'

CREATE PROCEDURE [dbo].[usp_InsertorUpdateDB] 
    @dp_id    char(32), 
    @dv_id    char(32), 
    @em_number   char(12), 
    @email    varchar(50), 
    @emergency_relation char(32), 
    @option1   char(16), 
    @status   char(20), 
    @em_id    char(35), 
    @em_title   varchar(64), 
    @date_hired   datetime 

AS 

MERGE [dbo].[em] AS [Target] 
USING (SELECT @dp_id, @dv_id , @em_number, @email, @emergency_relation, @option1, @status, @em_id, @em_title, @date_hired) 
AS [Source] ([dp_id], [dv_id], [em_number], [email], [emergency_relation], [option1], [status], [em_id], [em_title], [date_hired]) 

ON [Target].[em_id] = [Source].[em_id] 

WHEN MATCHED THEN 
    UPDATE SET [dp_id]    = [Source].[dp_id], 
       [dv_id]     = [Source].[dv_id], 
       [em_number]    = [Source].[em_number], 
       [email]     = [Source].[email], 
       [emergency_relation] = [Source].[email], 
       [option1]    = [Source].[option1], 
       [status]    = [Source].[status], 
       [em_id]     = [Source].[em_id], 
       [em_title]    = [Source].[em_title], 
       [date_hired]   = [Source].[date_hired], 

WHEN NOT MATCHED THEN 

    INSERT ([dp_id], [dv_id], [em_number], [email], [emergency_relation], [option1], [status], [em_id], [em_title],[date_hired]) 
    VALUES ([Source].[dp_id], [Source].[dv_id], [Source].[em_number], [Source].[email], [Source].[emergency_relation], [Source].[option1], [Source].[status], [Source].[em_id], [Source].[em_title], [Source].[date_hired]); 
GO 

Я получаю ошибку на линии WHEN NOT MATCHED THEN

Неправильный синтаксис около ключевого слова 'когда'.

Я новичок в храневой процедуре и попытался выяснить ее, но не смог.

+0

Перед тем, как сделать основной "upsert", как это вы должны взглянуть здесь. http://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/ Вы заметите, что эти upserts могут создавать взаимоблокировки «по дизайну». –

ответ

4

Вы не хотите, чтобы эта запятая -

UPDATE SET [dp_id]    = [Source].[dp_id], 
      [dv_id]     = [Source].[dv_id], 
      [em_number]    = [Source].[em_number], 
      [email]     = [Source].[email], 
      [emergency_relation] = [Source].[email], 
      [option1]    = [Source].[option1], 
      [status]    = [Source].[status], 
      [em_id]     = [Source].[em_id], 
      [em_title]    = [Source].[em_title], 
      [date_hired]   = [Source].[date_hired]**,** 

после [date_hired],

Смежные вопросы