2015-06-17 2 views
0

У меня есть таблица FlowTrack:Вставка не происходит в Merge, где обновление происходит

CREATE TABLE [dbo].[FlowTrack] 
(
    [RowID] [tinyint] IDENTITY(1,1) NOT NULL, 
    [ApplicationNo] [varchar](50) NOT NULL, 
    [StatusID] [tinyint] NOT NULL, 
    [UpdateType] [varchar](100) NULL, 
    [CreatedDate] [datetime] NULL, 
    [CreatedBy] [varchar](50) NULL 
) ON [PRIMARY] 

Sample данные:

RowID ApplicationNo StatusID UpdateType CreatedDate CreatedBy 
1 BPS/ANA/MO/7/0146215 1 3 2015-06-17 12:59:56.387 Tests 
2 BPS/BHI/20/0164615 1 3 2015-06-17 12:57:57.727 Tester 
3 BPS/BHI/6/0204815 1 3 2015-06-17 12:57:57.727 Tester 

Моя процедура:

ALTER procedure Flowtrack 
    (@APPNO varchar(50), 
    @vc_status CHAR(1), 
    @CreatedBy varchar(50)) 
AS 
BEGIN 
    MERGE INTO [dbo].Flowtrack AS target 
    USING (SELECT ApplicationNo, StatusID 
      FROM Flowtrack 
      WHERE ApplicationNo = @APPNO AND [StatusID] = @vc_status) AS source 
     ON target.ApplicationNo = Source.ApplicationNo 

    WHEN MATCHED THEN 
     UPDATE 
      SET 
      target.ApplicationNo = source.ApplicationNo, 
      target.StatusID = source.StatusID, 
      target.UpdateType = 3, 
      target.CreatedDate = getdate(), 
      target.CreatedBy = @CreatedBy 

    WHEN NOT MATCHED BY TARGET THEN 
     INSERT 
      ([ApplicationNo], [StatusID], [UpdateType], 
      [CreatedDate], [CreatedBy]) 
     VALUES (source.ApplicationNo, source.StatusID, 3, 
       getdate(), @CreatedBy); 
end 

Когда я обновление обновляется

EXEC Flowtrack 'BPS/ANA/MO/7/0146215',3,'Tests' 

но при попытке вставить, не вставляя новый рекорд

Я не могу понять, почему он не вставляя

Чтобы вставить новое приложение не

EXEC Flowtrack 'BPS/ANA/MO/7',3,'Test' 
+0

хранимая процедура принимает 3 параметра, вы отправляете 4 –

+0

мои плохие только 3 параметра Я удаляю, что передача параметра @ t-clausen.dk – mohan111

+1

'source.StatusID' выиграл Нет, если запись не сопоставлена ​​ – StuartLC

ответ

2

Здесь проблема:

MERGE INTO [dbo].Flowtrack AS target 
USING (SELECT ApplicationNo, StatusID 
     FROM Flowtrack 
     WHERE ApplicationNo = @APPNO AND [StatusID] = @vc_status) AS source 
    ON target.ApplicationNo = Source.ApplicationNo 
    AND target.StatusID = Source.StatusID 

проблема при передаче нового AppNo , то source пуст и нечего вставлять.

Изменить на:

MERGE INTO [dbo].Flowtrack AS target 
USING (SELECT ApplicationNo, StatusID 
     FROM (VALUES(@APPNO, @vc_status, @CreatedBy)) t(ApplicationNo, StatusID , CreatedBy) 
    ) AS source 
    ON target.ApplicationNo = Source.ApplicationNo 
    AND target.StatusID = Source.StatusID 
+0

Позвольте мне реализовать в своем коде, основываясь на том, что я спрошу у вас – mohan111

+0

, почему вы вводите входные параметры в заявление о слиянии и почему он работает для обновления не для Insert @Giorgi Nakeuri – mohan111

+0

Что это значит? Это не сработало? –

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