根据从中选择的表中的数据确定要在INSERT语句中使用的列

时间:2013-12-11 03:25:06

标签: sql sql-server-2008

我需要确定是否应该根据所选表格的processDate列中的数据将数据插入theDate或theDate2列。我无法在CASE语句中使用列(我在尝试运行下面的代码时遇到错误),我找不到解决方案。我怎样才能做到这一点? processDate是#tableTwo的一个列。

   INSERT INTO tableOne
       CASE WHEN processDate <> '' THEN + ',' +  theDate ELSE + ',' +  theDate2 
       END
   SELECT sDate     
   FROM #tableTwo

3 个答案:

答案 0 :(得分:1)

如果可以通过标志processDate确定theDate和theDate2,则在select而不是insert中执行。假设列可以为空(因为INSERT子句中的CASE似乎表明它们是互斥的,那么我倾向于做类似的事情;

   INSERT INTO tableOne (theDate, theDate2)
   SELECT 
       CASE WHEN processDate <> '' 
           THEN sDate 
           ELSE NULL 
       END theDate,
       CASE WHEN processDate = '' 
           THEN sDate 
           ELSE NULL 
       END theDate2,
   FROM #tableTwo

答案 1 :(得分:0)

两个查询会是什么样的:

INSERT INTO tableOne (theDate) 
SELECT sDate 
FROM #tableTwo 
WHERE processDate <> ''

跟随

之类的东西
INSERT INTO tableOne (theDate2) 
SELECT sDate 
FROM #tableTwo 
WHERE processDate = ''

答案 2 :(得分:0)

插入的正确语法是

insert into table
(field1, field2, etc)
select field3, field4, etc
from somewhere

我不知道这是否有效,但您可以尝试:

insert into tableOne
(case when processDate <> '' then theDate else Date2 end)
select sdate
from #table2