2013-10-18 48 views
0

爲什麼我不能執行下面的腳本,我該如何解決它?我收到錯誤Inccorect syntax near '='。我正在使用...= 1 THEN 'D' ELSE '' END as Aset,但我需要檢查第三個Case中的Aset和Bset,以便我聲明Aset和Bset。SQL案例問題設置變量

declare @Aset varchar(10) 
declare @Bset varchar(10) 
UPDATE m 
    SET m.new_name = m.new_name + ' ' + @ASet + AndSet + @BSet + ' Type' 
FROM contactMaster m 
inner join contact c on 
    m.contactid = c.contactid 
    CROSS APPLY (
     SELECT CASE @Aset WHEN (c.category1| 
          c.category2| 
          c.category3| 
          c.category4) = 1 THEN 'C' ELSE '' End 
       ,CASE @Bset WHEN (c.category5| 
          c.category6| 
          c.category7| 
          c.category8) = 1 THEN 'D' ELSE '' END 
       ,CASE WHEN @BSet = 'D' and @ASet = 'C' THEN ' & ' ELSE '' END AS AndSet 
    ) AS CA1 

回答

1

我沒有你的表架構或數據,所以只好臨場發揮,無法測試,但看看這可能工作:

UPDATE  m 
SET   m.new_name = m.new_name 
         + ' ' 
         + CA1.ASet 
         + CASE WHEN 
          (
           CA1.Aset = 'C' AND 
           CA1.Bset = 'D' 
          ) 
          THEN ' & ' ELSE '' END 
         + CA1.BSet + ' Type' 

FROM  contactMaster m 
JOIN  contact   c on m.contactid = c.contactid 
CROSS APPLY (
       SELECT CASE WHEN 
         (
          c.category1 | 
          c.category2 | 
          c.category3 | 
          c.category4 
         ) 
         = 1 THEN 'C' ELSE '' END AS Aset, 
         CASE WHEN 
         (
          c.category5 | 
          c.category6 | 
          c.category7 | 
          c.category8 
         ) 
         = 1 THEN 'D' ELSE '' END AS Bset 
      ) AS CA1