Хранится Proc: петля с математикой - PullRequest
1 голос
/ 23 марта 2012

Мне нужно создать хранимую процедуру - однако у меня очень ограниченные знания о них.

В основном она будет импортировать данные из существующей таблицы, обрабатывать эти данные, а затем создавать новую таблицу.

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

Существует несколько различных счетчиков, и значения добавляются к этим счетчикам в соответствии с другим значением;

например:

house_name  | person_name
------------+------------
bighouse    |  sam
bighouse    |  sammy
bighouse    |  joe
smlhouse    |  brad
smlhouse    |  kev

т.е.в этом примере счетчики будут иметь значения 3 и 2 (3 человека в бигхаусе, 2 в smlhouse) (в моей реальной работе оба являются 'int', поэтому проблем нет).

Мне сказалииспользовать курсор, но мне трудно понять, как его использовать!

Любая помощь приветствуется.

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Обычно вы не будете хранить «производную» информацию в базе данных.Это всегда создает риск несоответствий.

Обычный подход заключается в добавлении представления:

create view house_stats
as
select  house_name
,       count(*) as number_of_people
from    YourTable
group by
        house_name

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

0 голосов
/ 23 марта 2012

Ваш вопрос мне кажется расплывчатым, но я могу дать вам код для этого очень конкретного примера.

INSERT INTO
  yourResultsTable
SELECT
  house_name,
  COUNT(*)       AS people_per_house
FROM
  yourDataTable
GROUP BY
  house_name

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

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

0 голосов
/ 23 марта 2012
...