将AutoIncrement限制为特定范围

时间:2014-05-01 12:46:58

标签: visual-studio-2010 vba database-design sql-server-ce-3.5

我正在尝试创建一个工作应用程序。该应用程序将在内部使用,并允许我们为我们的产品SKU分配一些条形码编号。我正在使用Visual Studio / Basic 2010 Express来构建这个,因为我非常有限且初学者体验的是VS 2010 Express。

我会提供一些有关我如何看待此应用程序的信息,然后我将继续讨论我的实际问题:

我看到应用程序允许我们通过用户输入SKU和产品描述在数据库中创建新产品,然后应用程序将为该产品分配条形码的下一个可用基数,并从那里应用程序将(如果需要)生成正确的EAN13和GTIN14条形码并将其存储在该SKU上。

作为一家公司,我们可以使用大量的条形码编号,我们将这个大范围分开,以便前50,000个(例如)用于我们的EAN13代码,接下来的50K用于我们的GTIN14代码用于内部纸箱和剩余的50K用于纸箱大师。

所以为了达到这个目的,我的产品表包含了字段' SKU''描述'和' BarcodeBase'。我设法将BarcodeBase字段设置为唯一,并且我尝试使用AutoIncrement(种子和步骤)来确保为产品分配一个基本条形码(在我计算校验位之前),该条形码在EAN13范围内,如上所述以上...

所以最后我的问题是:有没有办法可以对AutoIncrement设置一个上限,以便在将来的方式,基本条码数字不会溢出到下一个范围?

我一直在谷歌搜索没有成功的答案,我只是遇到的事情谈论有限制的字段的数据类型。例如,Int32类型的上限。通过我的搜索,我已经模糊地意识到了“表情”。该领域的财产以及编写部分班级的可能性 - 但我不知道这是否是正确的方向,或者是否有更简单的东西我忽略/未找到。

我真的很感激任何帮助!

编辑:根据GrandMasterFlush的评论 - 我已经在我的VS项目中添加了一个本地数据库。所以我认为我使用的是SQL Server Compact 3.5 db。

1 个答案:

答案 0 :(得分:1)

使用CHECK约束,例如:

ALTER TABLE dbo.Product ADD CONSTRAINT ...
CHECK (BarcodeBase BETWEEN 1 AND 50000);

我建议您不要将BarcodeBase设置为Product表中的IDENTITY列(IDENTITY是您称为“自动增量”的功能)。 IDENTITY实际上仅用于代理键,并不适用于有意义的业务数据。您无法更新IDENTITY列,它不一定是顺序的,可能在数字序列中有间隙,您也只能在每个表中使用一个IDENTITY列。您可以在其他地方生成序列,而不是在Product表中使用IDENTITY,例如通过递增存储在单行表中的单个值。