2010-05-17 4 views
4

필자는 기본적으로 세 개의 필드를 가지고 있으며, 세 개의 필드를 결합하여 새로운 주소를 만드는 중입니다. 문제는 일부 필드에 null 값이 포함되어 있고 null에 myString을 추가하면 sql에 null이 생성됩니다.이 코드를 최적화 할 수 있습니까? T-SQL

내 코드는 누구나이 코드를 더 깨끗하게 만들 수 있습니까? 여전히 예쁜 부치가 보인다!

UPDATE [mydb].[dbo].[Account] 
    SET [Billing Street] = CASE 
    WHEN [(Billing Address 1)] is null and [(Billing Address 2)] is null THEN [(Billing Address 3)] 
    WHEN [(Billing Address 1)] is null and [(Billing Address 3)] is null THEN [(Billing Address 2)] 
    WHEN [(Billing Address 2)] is null and [(Billing Address 3)] is null THEN [(Billing Address 1)] 
    WHEN [(Billing Address 1)] is null THEN [(Billing Address 2)] + ' ' + [(Billing Address 3)] 
    WHEN [(Billing Address 2)] is null THEN [(Billing Address 1)] + ' ' + [(Billing Address 3)] 
    WHEN [(Billing Address 3)] is null THEN [(Billing Address 1)] + ' ' + [(Billing Address 2)] 
    ELSE [(Billing Address 1)] + ' ' + [(Billing Address 2)] + ' ' + [(Billing Address 3)] 
    END 
+0

같이 계속 시작 3 개 별도의 필드에이를 저장하기위한 어떤 특별한 이유가 있나요

ALTER TABLE Account ADD [Billing Street] AS LTRIM... 

? –

+0

데이터는 모든 종류의 마법을 수행하는 입력 파일에서 가져온 것이므로 손대지 않아야합니다. – Yoda

+0

이 스택 교환 [제안] (http://area51.stackexchange.com/proposals/11464/code-review) ? referrer = aWNm_PdciyFqjFW8CUacGw2 "코드 검토")가 관심을 가질 수 있습니다. 지원 내용을 보여주고 베타 테스트에 참여하게하십시오! :) – greatwolf

답변

7

당신은 isnullltrim는 선행 공백을 제거하는 데 사용할 수 있습니다 : 당신이 계산 열 만드는 더 나은 것, 과거와 열 모두가 공존하려는 경우

update [mydb].[dbo].[Account] 
set [Billing Street] = ltrim(isnull([(Billing Address 1)], '') + 
         isnull(' ' + [(Billing Address 2)], '') + 
         isnull(' ' + [(Billing Address 3)], '')) 
+0

+1 - 본질적으로 같은, 그냥 합체를 사용하여 삭제 된 광산. – AdaTheDev

+0

좋은 직장! 마지막 isnull의 첫 번째 매개 변수 다음에 braket은 나처럼 간결하게 나를 넘어 뜨 렸지만 견과류처럼 달콤합니다. – Yoda

2

을 - 그런 식으로, 그들은 결코 서로 "동기화되지"않습니다.

는 Andomars 문을 가지고, 읽기로 변경 : LTRIM ... Andomar의 대답

관련 문제