通过多个表单传递自动递增的id

时间:2011-06-14 14:31:41

标签: sql-server vb.net tsql

需要建议在多种表单上获取自动递增ID的最佳方法是什么。

基本上我使用VB .Net和SQL Server作为后端。我写了一些存储过程来插入数据,然后我在前端调用存储过程。我有3个表单,一旦提交了第一个表单,它就会生成一个autoID,然后将用户带到第二个表单。

在第二种形式中,我有一个单独的插入存储过程,有一种方法可以获取第一个表单生成的id,并使其保持一致。或者我应该在提交表单后将其存储在变量中,然后以第二种形式调用它。

我读到了@@Identity但是只能抓住那个会话中的id,因为我提交的是第一个表单数据,然后转到第二个不会是一个不同的会话。

由于

3 个答案:

答案 0 :(得分:0)

这导致您出现问题的事实可能表明这不是最好的方法。也许相反,使用DB上的函数返回ID,然后在.net代码中设置它?

如果您有一个自动递增的ID,那么它只应在创建记录时递增。你的三个表格是否创造了三个记录?那是你要的吗?如果是这样,那么自动ID肯定不是正确的方法。

答案 1 :(得分:0)

我想也许你在想这个?

  

我读到了@@ Identity,但是我只提取该会话中的id,因为我提交的是第一个表单数据,然后转到第二个不会是另一个会话。

您不想要在第一个表单上创建的条目生成的密钥吗?

  

在第二种形式中,我有一个单独的插入存储过程,有一种方法可以获取第一个表单生成的id ,并使其保持一致。或者我应该在提交表单后将其存储在变量中,然后以第二种形式调用它。

答案 2 :(得分:0)

您的存储过程可以返回标识值(使用输出子句或scope_identity()来获取它)作为输出变量,您将其作为变量存储在应用程序中,然后可以使用它。当人们移动到不同的记录并且在所有关联的formas已经插入记录之后,你可能希望确保使变量无效,这样你就不会在其他时间无意中使用它。

您不希望永远使用@@ identity,因为它不可靠并且可能会产生大量的数据完整性问题,因为如果有人添加了一个插入另一个具有标识的表的触发器,它会给您错误的值。