Как INSERT и UPDATE работают, основываясь на условии IF? - PullRequest
0 голосов
/ 13 мая 2018

Любопытно узнать одну простую концепцию SQL в SQL Server. У меня есть две таблицы, основанные на определенном условии IF, я хотел бы обновить и вставить данные из разных таблиц. Я использую запрос ниже для этого в хранимой процедуре.

IF( SELECT COUNT(colname) FROM [dbo].[Table_BKP] WHERE colname LIKE ('%Dear(DEC''D)444-0292/555-4528C%'))> 0 
BEGIN   
 ;WITH Dear AS 
(
SELECT ID,colname,SUBSTRING(colname,PATINDEX('%(DEC''D)%',colname),LEN(colname)-1) AS colname_4SUPPL,LEFT(colname,PATINDEX('%(DEC''D)%',colname)-1) AS colname_4MAIN
FROM [dbo].[Table_BKP] WHERE RTRIM(LTRIM(colname)) LIKE ('Dear(DEC''D)444-0292/555-4528C')
) SELECT * INTO Dear_ FROM Dear

 UPDATE A SET A.colname = B.colname_4MAIN FROM Table AS A INNER JOIN 
  Dear_ AS B ON A.ID = B.ID 
  INSERT INTO Table_SUPPL(ID,colnameMSC,[SOURCE],[TARGET])
 SELECT ID,replace(colname_4SUPPL,'(DEC''D)',''),'colname','colnameMSC' 
 FROM Dear_ 
END

Оператор обновления работает нормально, и данные обновляются в необходимой таблице. Однако данные не вставляются в требуемую таблицу.

Но, когда я изменил последовательность, как показано ниже, она работала отлично.

IF( SELECT COUNT(colname) FROM [dbo].[Table_BKP] WHERE colname LIKE ('%Dear(DEC''D)444-0292/555-4528C%'))> 0 
     BEGIN  
   ;WITH Dear AS 
(
SELECT ID,colname,SUBSTRING(colname,PATINDEX('%(DEC''D)%',colname),LEN(colname)-1) AS colname_4SUPPL,LEFT(colname,PATINDEX('%(DEC''D)%',colname)-1) AS colname_4MAIN
FROM [dbo].[Table_BKP] WHERE RTRIM(LTRIM(colname)) LIKE ('Dear(DEC''D)444-0292/555-4528C')
) SELECT * INTO Dear_ FROM Dear

   INSERT INTO Table_SUPPL(ID,colnameMSC,[SOURCE],[TARGET]) SELECT 
   ID,replace(colname_4SUPPL,'(DEC''D)',''),'colname','colnameMSC' FROM 
  Dear_ 
  UPDATE A SET A.colname = B.colname_4MAIN FROM Table AS A INNER JOIN 
Dear_ AS B ON A.ID = B.ID 

END

Почему формальный вопрос не работает должным образом? И, более поздний [сразу после смены секвеста (1-я INSERT, затем Update)]; Это работает отлично ... Как SQL Server управляет этими последовательностями? Может ли кто-нибудь прояснить это простое сомнение? Спасибо.

...