【问题标题】:Setting MAX for Auto Increment ID in SQL Server在 SQL Server 中为自动增量 ID 设置 MAX
【发布时间】:2017-04-05 07:36:50
【问题描述】:

我有一个从数据库表中导入 221 行的表。每当我在 HTML 表格页面中动态添加一行时,我希望它能够提取 MAX ID,因此在本例中为 221,并向其添加 1,因此将 MR_ID 设为 222。我需要这个,因为每个 ID 都必须是独一无二的。每当我在表中添加一行并在数据库中查看它时,它都会显示为 NULL。我有一些东西,但它似乎没有工作。如果您需要的代码比我发布的更多,请告诉我,我会提供。谢谢!

<?php

  $MR_ID = $_POST['MR_ID'];
  $MR_Name = $_POST['MR_Name'];
  $Buyer_ID = $_POST['Buyer_ID'];
  $MR_POC_N = $_POST['MR_POC_N'];
  $MR_POC_E = $_POST['MR_POC_E'];
  $MR_POC_P = $_POST['MR_POC_P'];

  $host="xxxxxxx"; 
  $dbName="xxxx"; 
  $dbUser="xxxxxxxxxxx"; 
  $dbPass="xxxxxxxxx";

  $pdo = new PDO("sqlsrv:server=".$host.";Database=".$dbName, $dbUser, $dbPass);

  $MR_ID = "Select MAX(MR_ID) + 1 FROM Stage_Rebate_Master";
  $sql = "INSERT INTO Stage_Rebate_Master (MR_ID, MR_Name, Buyer_ID, MR_POC_N, MR_POC_E, MR_POC_P) VALUES (?, ?, ?, ?, ?, ?)";
  $stmt = $pdo->prepare($sql);
  $result = $stmt->execute(array($MR_ID, $MR_Name, $Buyer_ID, $MR_POC_N, $MR_POC_E, $MR_POC_P));
  echo json_encode($result);

?>

【问题讨论】:

  • max+1 取决于竞争条件。为什么不将 MR_ID 设置为标识或 auto_increment 并让数据库处理它以避免竞争条件?
  • 我确实有另一个自动递增的列,并且可以用作实际 ID....但是这个 MR_ID 列被用作整个数据库的查找,所以我不能只有 NULL 值
  • 在非键值上关联表似乎是一种奇怪的方式......我想你可以使用触发器在更新之前将 MR_ID 设置为自动递增的值。 (假设这个 DBMS 使用触发器)
  • 我的意思是我可以将 MR_ID 列设置为自动增量或像你说的那样......从我所看到的情况来看,似乎 MR_ID 发布为 0 并且看不到有多少MR_IDs 我实际上是为了做 MAX。是的,DBMS 确实使用了触发器。
  • @BillKarwin 谢谢,做到了!

标签: sql sql-server insert auto-increment


【解决方案1】:

你可以这样试试

$sql = "INSERT INTO Stage_Rebate_Master (MR_ID, MR_Name, Buyer_ID, MR_POC_N, MR_POC_E, MR_POC_P) SELECT  ISNULL(MAX(MR_ID)+1,1), ?, ?, ?, ?, ? FROM Stage_Rebate_Master";
$stmt = $pdo->prepare($sql);
$result = $stmt->execute(array( $MR_Name, $Buyer_ID, $MR_POC_N, $MR_POC_E, $MR_POC_P));

【讨论】:

  • 每当我运行它时,我都会收到内部服务器错误...我猜它与查询有关
猜你喜欢
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 2013-04-21
  • 2012-12-01
  • 1970-01-01
相关资源
最近更新 更多