使用SQL存储过程生成自动Id

时间:2016-10-16 10:44:39

标签: sql sql-server-2008 stored-procedures

我有一个玩具管理系统数据库,有两个表:

  1. toys(玩具,关联,类别,价格,数量)
  2. category(categoryid,categoryname,description)
  3. toyid中的toys将根据所选类别自动生成。

    例如,如果我选择类别为infant,那么生成的ID就像IN100

    如果我选择Grown up ID为GU100

    每个类别都有自己的增量ID ..

    IN100,IN101,IN102,....
    GU100,GU101,GU102,,,,
    

    如何自动生成上述系列?

    如何在存储过程的帮助下执行此操作?

2 个答案:

答案 0 :(得分:3)

我建议您这样做。只需使toyid成为自动递增的标识列即可。这种合成密钥比信息密钥更灵活。

考虑一下:如果将现有类别拆分为两类,您会怎么做?如果将两个现有类别合并为一个新类别,您会怎么做?如果您有多个具有相同两位数前缀的类别,那么这些ID会是什么意思?

相反,只需使用合成密钥并使用数据库在需要时查找类别。

也就是说,如果你忽视这个建议,那么你需要toys表上的触发器来创建适当的id。

答案 1 :(得分:-1)

DECLARE @Id INT = 0,@ CatCode VARCHAR(50)=''

SELECT @Id = MAX(toyid)FROM玩具WHERE category = your_Selected_Category SELECT @CatCode = categoryCode FROM category WHERE categoryid = your_Selected_Categoryid

IF ISNULL(@Id,'')=''   SET @Id = @CatCode + RIGHT((' 100' + 1),3) ELSE
  SET @Id = @CatCode + RIGHT((' 100' +(@ Id + 1)),3)