2016-06-13 5 views
0

Я пытаюсь создать скрипт If Else Update. Это то, что я собрал до сих пор:SQL - Если Else Update Script Statement

IF (SELECT [FileType1] 
    FROM Document 
    WHERE ([FileType1] LIKE 'E-mail' OR [FileType1] LIKE 'outlook')) 

    UPDATE Document 
    SET [FilePath] = [Full Path] 

ELSE ((SELECT [FileType1] 
     FROM Document 
     WHERE ([FileType1] NOT LIKE 'E-mail' OR [FileType1] NOT LIKE 'outlook')) 

    UPDATE Document 
    SET [Path] = [Full Path] 

Что я делаю неправильно? В принципе, если E-mail или outlook находятся в одном из операторов, я хочу, чтобы столбец file был равен полному столбцу пути.

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

+0

Возможный дубликат [с использованием оператора условного обновления в sql] (http://stackoverflow.com/questions/6097815/using-a-conditional-update-statement-in-sql) –

+0

не уверен, зачем вам нужно 'IF ELSE' здесь; что мешает вам писать условия на 'UPDATE' – techspider

ответ

2

Вы можете сделать это с CASE заявлением в то время как недобросовестное условие ELSE к себе:

Update Document 
Set  FilePath = Case When FileType1 In ('E-mail', 'Outlook') 
         Then [Full Path] 
         Else FilePath 
        End, 
     [Path] = Case When FileType1 Not In ('E-mail', 'Outlook') 
         Then [Full Path] 
         Else [Path] 
        End 

Я также удалил LIKE заявление (так как вы только использовать их для равенства), и удаляете OR утверждений от IN и NOT IN.

2

В качестве альтернативы, вы можете упростить и сократить предложение Siyual к только с помощью [iif], который является относительно новым, т.е. введенную с SQL Server 2012.

update d 
set FilePath = iif(FileType1 in ('E-Mail', 'Outlook'), FullPath, FilePath), 
    Path = iif(FileType1 not in ('E-Mail', 'Outlook'), FullPath, Path) 
from Document d; 

надеется, что эта помощь.

+0

IIF в SQL? Я был немного удивлен, но затем я читал здесь: https://msdn.microsoft.com/en-AU/library/hh213574.aspx?f=255&MSPPError=-2147217396 –