检查主键分配
本文关键字:分配 检查 | 更新日期: 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/