2010-01-27 3 views
0

У меня есть таблица с полем, назовите ее «оценка». Можно ли написать SQL, который принимает значение в каждом поле «score», вводит значение в формулу, тогда вывод из формулы записывается в другое поле. У меня нет опыта использования формул в SQL, и я не знаю, возможно ли это. Любой базовый пример, если это выполнимо, будет полезен.Пример SQL Server SQL, который использует формулу

ответ

0

Довольно неопределенный вопрос, но вот общая идея.

UPDATE MyTable SET FormulaOutput = HomeScore + AwayScore

Эта "формула" просто складывает 2 баллов вместе

Я полагаю, вы можете также вычислить "распространение", как это:

UPDATE MyTable SET Spread = MAX (HomeScore, AwayScore) - MIN (HomeScore, AwayScore)

+0

спасибо всем ... не знал, что это было возможно, я принял человека с самым низким счетом, надеюсь, что все в порядке, потому что все отзывы были потрясающими, спасибо много – bmw0128

1

Да, это возможно, но почти всегда вы не хотите хранить вычисленное поле в базе данных, так как это означает, что ваша база данных неправильно нормализована.

Вместо этого вычисляйте значение, когда вы запрашиваете его, добавив дополнительный производный столбец в свой оператор select.

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

+2

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

+0

Это, безусловно, вариант, но вы должны заметить, что вычисленные столбцы могут использовать значения только в других столбцах в одной таблице и не могут включать подзапросы. http://msdn.microsoft.com/en-us/library/ms191250.aspx Я ссылался на «трудоемкий расчет», который, на мой взгляд, подразумевает * как минимум * один подзапрос, возможно, больше. Были ли у вас какие-то другие трудоемкие вычисления, которые не требуют подзапросов? Можете ли вы привести пример? –

1

Это называется computed column - они поддерживаются:

  • таблиц
  • ЗЕЬЕСТ
  • Просмотров
1

Вместо того, чтобы хранить его, я бы посоветовал вам, чтобы вычислить его в режиме реального времени по запросу или как computed column или использовать indexed view, если производительность слишком медленная.

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