2009-08-13 7 views
14

У меня есть таблица с несколькими полями счета, как это:Как настроить простое вычисляемое поле в 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.

ответ

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

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

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

+0

Отличный, полезный для меня еще несколько лет спустя. – enderland

3

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

8

Это прекрасный кандидат на представление.

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 
+0

Ugh. Должно быть, меня избили за секунды. heh – DavidStein

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

столбец не сохраняется в таблице, будет воссоздан на-CLY каждый раз, когда вы ссылаетесь его. Вы можете добиться того же результата, используя представление. Если вы используете предикаты фильтрации или упорядочивания в вычисленном столбце и хотите добавить индекс, см. Creating Indexes on Computed Columns.

+2

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

+0

Пока вы знаете о постоянном столбце при выполнении технического обслуживания проекта. Если вы этого не сделаете, тогда могут возникнуть проблемы. – Coops

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

  • Нет связанных вопросов^_^