2016-06-13 61 views
-1

我正在尝试创建If Else更新脚本。这是我已经放在一起迄今为止:If Else Update Script

IF (SELECT [FileType1] FROM Document 
       WHERE ([FileType1] like 'E-mail' or [FileType1] like 'outlook')) 
    UPDATE Document 
    SET [FilePath]='' 
ELSE ((SELECT [FileType1] FROM Document 
       WHERE ([FileType1] not like 'E-mail' or [FileType1] not like 'outlook')) 
    UPDATE Document 
    SET [Path]='' 

我做错了什么?

+1

请添加标记,用于指定要使用的数据库引擎。 – trincot

+0

我正在使用SQL Server 2008 R2。 – Jeff

回答

2

这可以使用case表达式来完成。如果它们是准确的,则使用=而不是like来比较这些值。

update Document 
set [FilePath]= case when [FileType1] like 'E-mail' or [FileType1] like 'outlook' then '' 
       else [FilePath] end 
,[Path] = case when [FileType1] not like 'E-mail' or [FileType1] not like 'outlook' then '' 
       else [Path] end 
2

有与您当前的逻辑的几个问题:

  1. 有条件的结构是不正确的 - 这是你认为你的问题目前。您将需要两次更新,每次都内置条件逻辑。

  2. 您使用like操作者不使用任何通配符

  3. 你在两个语句逻辑具有一些重叠,由于相反的(A或B)实际上是(非A和非B)

这里是你如何解决所有三个问题:

UPDATE Document 
SET [FilePath] = '' 
WHERE [FileType1] like '%E-mail%' or [FileType1] like '%outlook%' 

UPDATE Document 
SET [Path] = '' 
WHERE [FileType1] not like '%E-mail%' and [FileType1] not like '%outlook%'