SQL - 如果还有更新脚本语句

时间:2016-06-13 20:04:18

标签: sql sql-server sql-server-2008 tsql

我正在尝试创建一个If Else Update Script。这就是我到目前为止所做的:

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]

我做错了什么?基本上,如果在一个语句中找到电子邮件或Outlook,我希望 filepath 列等于完整路径列。

如果找到非电子邮件,我希望路径列等于完整路径列。

2 个答案:

答案 0 :(得分: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和{{1} }。

答案 1 :(得分: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;

希望这有帮助。