存储过程 - 插入

时间:2013-02-18 20:45:35

标签: sql sql-server stored-procedures

简化我有这样的表格设置:

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 个答案:

答案 0 :(得分: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

顺便说一句 - 我在构建小提琴时使用了不同的默认值 - 相应更新,您的金额将与帖子中的金额相匹配。