存储过程:循环数学

时间:2012-03-23 09:39:29

标签: sql tsql cursor procedure

我需要创建一个存储过程 - 但我对它们的知识非常有限。

基本上它会从现有表中导入数据,处理这些数据,然后创建一个新表。

最好的办法是什么?

有几个不同的计数器,并根据另一个值将值添加到这些计数器中;

例如:

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

即。在这个例子中,计数器的值为3和2(bighouse中有3个人,smlhouse中有2个人)(在我的实际工作中,两者都是'int',所以没有问题)。

我被告知要使用Cursor,但我发现很难知道如何使用它!

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:3)

通常,您不会将“派生”信息存储在数据库中。它总是带来不一致的风险。

通常的做法是添加一个视图:

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

您可以在查询中使用该视图,因为它是一个表。因为它实际上是存储的计算,所以不存在不一致的风险。

答案 1 :(得分:0)

答案 2 :(得分:0)

你的问题对我来说很模糊,但我可以为你提供非常具体的例子。

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

这可以避免使用游标。 SQL是一个基于集合的语言,尽管T-SQL可以执行循环,但在绝大多数情况下,你会发现性能要差得多。

如果你有其他的复杂的计数器,我们也可以提供帮助,但我们需要知道输入数据的结构,对数据的任何约束,输出数据的结构和约束,以及两者相互关联。