2013-02-18 118 views
1

简化我有这个设置表:存储过程 - 插入

Table Users:  Table HolidayTypes:    Table Days: 
    ID      ID       Year 
    Name    TypeName (f.e. 3 types)   TypeID 
         DefaultValue     UserId 
                 Amount 

现在我要实现的就是创建一个可以在每年年初,将做来运行存储过程以下内容:

对于每个用户,为每种类型的假期添加新的记录到Days表中并插入默认金额。 所以,我想是这样的:

Year  TypeId  UserId  Amount 
2013  1   1   20 
2013  2   1   4 
2013  3   1   15 
2013  1   2   20 
2013  2   2   4 
2013  3   2   15 

我已经得到了使用存储过程没有任何经验,所以如果有人可以帮助我这一个或帮助我在正确的方向。任何帮助是非常赞赏:)

+1

从哪里来的默认金额来? – 2013-02-18 20:54:16

+1

对不起,在第二个表中忘记了一个字段 – 2013-02-18 21:00:29

回答

1

这应该是你要找哪个查询使用CROSS JOIN

INSERT INTO Days 
SELECT Year(GetDate()) Year, 
    HT.Id TypeId, 
    U.Id UserId, 
    DefaultValue     
FROM Users U CROSS JOIN HolidayTypes HT 

这里是样品小提琴:http://sqlfiddle.com/#!3/15164/1

将会产生以下结果:

YEAR TYPEID USERID AMOUNT 
2013 1  1  20 
2013 2  1  10 
2013 3  1  5 
2013 1  2  20 
2013 2  2  10 
2013 3  2  5 

BTW - 因此和y更新 - 构建小提琴,当我用不同的默认值我们的金额将与您帖子中的金额相符。

+2

明确的'CROSS JOIN'可能会更可取;它使得意图是明确的(所以没有人认为这是一个意外的交叉连接),并且如果稍后编辑查询的话就不太可能导致错误 – Pondlife 2013-02-18 21:03:46

+0

我通常在需要时使用其他JOIN编写CROSS JOIN,因为两者是相同的,但是我会编辑回复使其更明显:)谢谢@Pondlife! – sgeddes 2013-02-18 21:05:03

+1

正是我在找的东西。日Thnx! – 2013-02-18 21:11:08