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

StackOverflow https://stackoverflow.com/questions/1274582

Вопрос

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

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.

Это было полезно?

Решение

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

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

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

Другие советы

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

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
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top