2013-10-18 1 views
0

왜 아래 스크립트를 수행 할 수 없으며이를 수정하는 방법은 무엇입니까? 오류 Inccorect syntax near '='가 표시됩니다. ...= 1 THEN 'D' ELSE '' END as Aset을 사용하고 있었지만 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