Как настроить простую вычисленную область в SQL Server?

У меня есть таблица с несколькими полями учетной записи, вроде этого:

MAIN_ACCT
GROUP_ACCT
SUB_ACCT

Мне часто нужно комбинировать их следующим образом:

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT
FROM ACCOUNT_TABLE

Я бы хотел, чтобы вычисляемое поле автоматически делало это, поэтому я могу просто сказать:

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE

Каков наилучший способ сделать это?

Я использую SQL Server 2005.

Ответы

Ответ 1

ALTER TABLE ACCOUNT_TABLE 
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED

Это будет сохраняться в вычисленном столбце и может работать лучше при выборе, чем при вычислении в представлении или в UDF, если у вас есть большое количество записей (как только началось создание столбца, которое может быть болезненно медленным и, вероятно, должно произойти во время низкое время использования). Это замедлит вставки и обновления. Обычно я нахожу, что медленная вставка или обновление лучше переносятся пользователями, чем задержка в выборе, если у вас нет проблем с блокировкой.

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

Ответ 2

Это отличный кандидат для просмотра.

CREATE VIEW vwACCOUNT_TABLE
AS

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT AS ACCT_NUMBER 
FROM ACCOUNT_TABLE

GO

--now select from the View
SELECT ACCT_NUMBER FROM  vwACCOUNT_TABLE

Ответ 3

ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;

столбец не сохраняется в таблице, будет воссоздан каждый раз, когда вы ссылаетесь на него. Вы можете добиться того же результата, используя представление. Если вы используете предикаты фильтрации или упорядочиваете в вычисленном столбце и хотите добавить индекс на него, см. Создание индексов в вычисленных столбцах.

Ответ 4

Ну, вы можете создать представление ACCOUNT_TABLE и запросить это. Или я считаю, что вы могли бы создать пользовательскую функцию, которая бы выполнила одно и то же.