检查主键分配

本文关键字:分配 检查 | 更新日期: 2023-09-27 18:30:32

我有一个 Web 应用程序,可以写入多个数据库以跟踪员工变更请求。我在招聘新员工时遇到问题。它们首先写入主数据库Employee然后访问信息写入其他数据库,EMP_ID是主键。当它写入其他数据库时EMP_ID已经生成,因此它被输入为 0。

为了解决这个问题,我试图循环并检查EMP_ID值,直到生成一个值,但我继续陷入循环,因为查询返回没有找到任何值。

while (int.Parse(empIDChecker) == 0)
{
   dbConnection.Open();
   validateIDSQLString = "SELECT EMP_ID FROM EMPLOYEE_TABLE WHERE FIRST_NAME = '" +        firstNameTextBox.Text.Trim() + "' AND LAST_NAME = '" + lastNameTextBox.Text.Trim() + "'";
   SqlCommand updateSQLCmd = new SqlCommand(validateIDSQLString, dbConnection);
   SqlDataReader getRecords = updateSQLCmd.ExecuteReader();
   try
   {
       empIDChecker = getRecords["EMP_ID"].ToString();
   }
   catch
   {
       empIDChecker = "0";
   }
   getRecords.Close();
   dbConnection.Close();
}

检查主键分配

好的,所以如果你的插入sproc看起来像这样:

sp_InsertEmp
...
INSERT INTO Emp(Name, etc...)
VALUES ('Paul', etc...)
SELECT SCOPE_IDENTITY() AS EMP_ID
GO

在您的代码中:

   SqlCommand insertCmd = new SqlCommand("sp_InsertEmp", dbConnection);
   ... Add parameters here and set type to StoredProcedure
   SqlDataReader dr= insertCmd.ExecuteReader();
   int newId;
   if (dr.Read())
   {
     newId = dr.GetInteger(0);
   }
您可以使用

SELECT IDENT_CURRENT(‘tablename’)

这将为您提供表的最后一个插入的自动增量 ID,您可以使用它插入到其他表中

也请查看此链接 http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/