2010-05-17 2 views
4

По существу у меня есть три поля, и я создаю новый, который состоит из трех комбинированных, создающих почтовый адрес; проблема заключается в том, что некоторые поля содержат нулевые значения и добавление myString в null приводит к получению нулевого значения в sql.Можете ли вы оптимизировать этот код? 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 отдельных областях, чтобы начать? –

+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 - удаленная шахта, которая была по существу тем же самым, просто используя coalesce. – AdaTheDev

+0

Хорошая работа! Брекет после первого параметра последнего isnull развязал меня вверх, но это сладкий, как орех, спасибо :) – Yoda

2

Если оба старые и новые столбцы собираются сосуществовать, вы бы лучше создать вычисляемый столбец - тот путь, они никогда не «не синхронизируются» друг с другом.

Возьмите Andomars заявление, и изменить его следующим образом:

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

Где LTRIM ... продолжается в ответ Andomar в

Смежные вопросы