INSERT查询与CASES共享相同的测试语句

时间:2013-12-05 22:36:39

标签: sql-server-2008 case insert-into

我有一个INSERT INTO查询,并且我有CASE语句来确定许多字段值。但是在下面的所有测试语句都是相同的,有没有办法合并这个?

field1 = CASE WHEN IID <> '\' THEN IID ELSE '' END 
field2 = CASE WHEN IID <> '\' THEN Left(IID, (InStrRev(IID, '\') - 1)) 
         ELSE '' END
field3 =  CASE WHEN IID <> '\' THEN Right(IID, (Len(IID) - InStrRev(IID, '\')))

1 个答案:

答案 0 :(得分:0)

CASE是一个返回单个值的表达式(不是语句)。除了简化你正在检查的表达式之外,我无法想到在这里完成合并的任何方法。例如,您可以使用子查询或CTE:

;WITH x AS 
(
  SELECT x = CASE WHEN IID <> '\' THEN 1 ELSE 0 END, other columns 
  FROM dbo.table
)
INSERT INTO ...
SELECT column1 = CASE x WHEN 1 THEN IID ELSE '' END,
       column2 = CASE x WHEN 1 THEN LEFT ...
...etc
FROM x;