Вычисляемый столбец на основе обнуляемых столбцов
Я хочу создать вычисляемый столбец, который является объединением нескольких других столбцов. В приведенном ниже примере 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()
выдает вам строку, если она не равна нулю, или второй параметр (который был передан как ''), если он равен нулю