Вычисляемый столбец на основе обнуляемых столбцов

Я хочу создать вычисляемый столбец, который является объединением нескольких других столбцов. В приведенном ниже примере fulladdress равен нулю в наборе результатов, когда любой из "реальных" столбцов равен нулю. Как я могу настроить функцию вычисляемого столбца, чтобы учитывать обнуляемые столбцы?

CREATE TABLE Locations
(
    [id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [fulladdress]  AS (((([address]+[address2])+[city])+[state])+[zip]),
    [address] [varchar](50) NULL,
    [address2] [varchar](50) NULL,
    [city] [varchar](50) NULL,
    [state] [varchar](50) NULL,
    [zip] [varchar](50) NULL
)

заранее спасибо

2 ответа

Решение

Это становится довольно быстро, но вот начало:

ISNULL(address,'')      + ' ' 
  + ISNULL(address2,'') + ' '
  + ISNULL(city,'')     + ' ' 
  + ISNULL(state,'')    + ' '
  + ISNULL(zip,'')

(Если isnull не работает, вы можете попробовать coalesce, Если ни одна из них не работает, поделитесь, какой DMBS вы используете.)

Вы не должны хранить столбец полного адреса (который является дубликатом других столбцов) в вашей базе данных, если у вас нет веской причины. Правильный способ - построить полную адресную строку в ваших запросах. Динамически создавая поле, вы уменьшаете избыточность в таблице, и у вас остается на один столбец меньше (его нужно будет обновлять при любых других изменениях столбца).

В своем запросе вы бы сделали что-то вроде

SELECT CONCAT(ISNULL(address,''), ISNULL(address2,''), ISNULL(city,''), ISNULL(state,''), ISNULL(zip,'')) AS fulladdress FROM Locations; 

CONCAT() Функция выполняет конкатенацию и ISNULL() выдает вам строку, если она не равна нулю, или второй параметр (который был передан как ''), если он равен нулю

Другие вопросы по тегам