Sql server 使用access前端更新sql server表的正确方法

Sql server 使用access前端更新sql server表的正确方法,sql-server,ms-access,identity-insert,Sql Server,Ms Access,Identity Insert,我在access中有一个前端,后端是sql server 2008 其中一个字段是帐号,下面是规则 它是一个类似92111加破折号加数字的zipcode 第一个是92111-1,第二个是92111-2 这与邮政编码中有多少客户有关 我想自动生成这个邮政编码。以下是我需要的: 用户输入邮政编码 我有一个存储过程,检查这个邮政编码是否已经存在,以增加它:如果92111-4已经存在,则将其设置为92111-5 正确的方法是什么?如果您将邮政编码和客户序列号存储在一个帐号字段中,则必须将它们分开,以计算

我在access中有一个前端,后端是sql server 2008

其中一个字段是帐号,下面是规则

它是一个类似92111加破折号加数字的zipcode

第一个是92111-1,第二个是92111-2

这与邮政编码中有多少客户有关

我想自动生成这个邮政编码。以下是我需要的:

  • 用户输入邮政编码
  • 我有一个存储过程,检查这个邮政编码是否已经存在,以增加它:如果92111-4已经存在,则将其设置为92111-5

  • 正确的方法是什么?

    如果您将邮政编码和客户序列号存储在一个帐号字段中,则必须将它们分开,以计算给定邮政编码中的下一个序列号

    将它们存储在两个字段中应该更简单:

    zipcode   sequence_num
    92111     4
    92111     5
    
    然后,在需要时使用查询派生您的帐号字段

    SELECT zipcode & "-" & sequence_num AS acct_num
    FROM YourTable;
    
    然后,当您需要确定给定zipcode pZip中的下一个序列_num lngNextSequenceNum时:

    lngNextSequenceNum = DMax("sequence_num", "YourTable", "zipcode = " & pZip) +1
    
    这种方法可以很好地用于单用户应用程序。如果您的应用程序是多用户的,那么您需要更精细的东西。但是,无论您是将“帐号”存储为单个字段还是将其拆分为两个字段,都存在该要求


    有关多用户方法,请参阅。

    如果在单个帐号字段中同时存储邮政编码和客户序列号,则必须将它们分开,以计算给定邮政编码中的下一个序列号

    将它们存储在两个字段中应该更简单:

    zipcode   sequence_num
    92111     4
    92111     5
    
    然后,在需要时使用查询派生您的帐号字段

    SELECT zipcode & "-" & sequence_num AS acct_num
    FROM YourTable;
    
    然后,当您需要确定给定zipcode pZip中的下一个序列_num lngNextSequenceNum时:

    lngNextSequenceNum = DMax("sequence_num", "YourTable", "zipcode = " & pZip) +1
    
    这种方法可以很好地用于单用户应用程序。如果您的应用程序是多用户的,那么您需要更精细的东西。但是,无论您是将“帐号”存储为单个字段还是将其拆分为两个字段,都存在该要求


    有关多用户方法,请参阅。

    我同意HansUp的观点,即应该将压缩和序列分开。您可以创建一个名为AccountNumber的索引计算字段,该字段连接zip和序列


    我知道的唯一方法是锁定表,选择
    max(sequence)。。。其中ZIP=12345
    ,插入新记录,然后解锁表。但是,锁定表意味着其他所有人都必须等待,这极大地影响了可伸缩性。我不能推荐这样做,但我没有其他解决方案。

    我同意HansUp的观点,即你应该将拉链和序列分开。您可以创建一个名为AccountNumber的索引计算字段,该字段连接zip和序列



    我知道的唯一方法是锁定表,选择
    max(sequence)。。。其中ZIP=12345
    ,插入新记录,然后解锁表。但是,锁定表意味着其他所有人都必须等待,这极大地影响了可伸缩性。我不推荐这样做,但我没有其他解决方案。

    您的程序是在计算下一个数字的同时添加新帐户记录,还是只返回下一个数字?@jeff:应该是新帐户,zip和Sequences在这个问题中没有任何东西表明web应用程序比桌面应用程序更“合适”。如果/当它们使用不同的邮政编码移动到不同的位置时会发生什么情况?@DForck42-这一点很好@珍妮-你应该考虑反弹这个“业务需求”,并简单地提出一个数字。在这种情况下,您可以使用标识列生成帐号,而不必担心锁定表、计算列等。您的过程是在计算下一个帐号的同时添加新的帐号记录,还是只返回下一个帐号?@jeff:它应该是一个新帐号,zip和Sequences在这个问题中没有任何东西表明web应用程序比桌面应用程序更“合适”。如果/当它们使用不同的邮政编码移动到不同的位置时会发生什么情况?@DForck42-这一点很好@珍妮-你应该考虑反弹这个“业务需求”,并简单地提出一个数字。在这种情况下,您可以使用标识列生成帐号,而不用担心锁定表、计算列等问题。@hansup:非常感谢。为什么我需要一种针对多用户的差异方法?您不希望用户在保存帐户记录之前输入邮政编码、获取帐号,然后去吃午饭。下一个人创建一个相同号码的新帐户的可能性很高。@hansup:非常感谢。我能不能让access自动保存每分钟左右?也许吧,但我不会那样做。如果两个用户在同一邮政编码中添加帐户,可能会立即发生冲突。顺便说一句,我刚意识到你说的表在SQL Server中。在这种情况下,您可能会考虑存储过程或插入触发器等。我严格地考虑访问条款,我也不知道如何告诉您编写SQL Server触发器或存储过程。我根本不是SQL Server专家,也从未声称自己是。我使用它的应用程序都是从Jet升级而来的,我尽可能地保持它的简单,并且在我的应用程序中,没有一个应用程序要求我将功能移动到存储过程中。在一些情况下,我可能会稍微提高性能,但在我个人工作的情况下,我还没有发现有足够的优势。@hansup:非常感谢。为什么我需要一种针对多用户的差异方法?您不希望用户在保存帐户记录之前输入邮政编码、获取帐号,然后去吃午饭。下一个人创建一个相同号码的新帐户的可能性很高。@hansup:非常感谢。我能不能让access自动保存每分钟左右?也许吧,但我不会那样做。如果两个用户正在添加accoun