WernerK: SQL Update bei vielen Anwendern

Beitrag lesen

Hallo Christian,

also es ist tatsächlich so, das ich zuerste einen Select mache um eine Nummer zu holen. Ich Prinzip vereinfacht so:

SELECT nummer FROM TableX
$auftragno = $row['numer'];
if($auftragno == ""){
  $auftragno = 1;
  INSERT INTO tableX nummer ($auftragno)
..
)
}else{
  $auftragno = $auftragno + 1;
  $sql_update = "
                UPDATE TableX
                SET nummer = '".$auftragno ."'WHERE CODE = '".$code."'
            ";
}

Also wenn ich euch richtig verstanden habe, dann besteht hier doch die Gefahr, dass es Duppletten geben kann. Nicht wegen dem Update an sich, sondern wegen dem Zeitpunkt des Selects?

Was ich gemeint habe das ich keine Transaktion verwenden kann ist das ich kein "sqlsrv" habe wie im Beispiel bei php.net.

/* Begin the transaction. */
if ( sqlsrv_begin_transaction( $conn ) === false ) {
     die( print_r( sqlsrv_errors(), true ));
}

/* Initialize parameter values. */
$orderId = 1; $qty = 10; $productId = 100;

/* Set up and execute the first query. */
$sql1 = "INSERT INTO OrdersTable (ID, Quantity, ProductID)
          VALUES (?, ?, ?)";
$params1 = array( $orderId, $qty, $productId );
$stmt1 = sqlsrv_query( $conn, $sql1, $params1 );

/* Set up and execute the second query. */
$sql2 = "UPDATE InventoryTable 
          SET Quantity = (Quantity - ?) 
          WHERE ProductID = ?";
$params2 = array($qty, $productId);
$stmt2 = sqlsrv_query( $conn, $sql2, $params2 );

/* If both queries were successful, commit the transaction. */
/* Otherwise, rollback the transaction. */
if( $stmt1 && $stmt2 ) {
     sqlsrv_commit( $conn );
     echo "Transaction committed.<br />";
} else {
     sqlsrv_rollback( $conn );
     echo "Transaction rolled back.<br />";
}

Dann muss ich vermutlich doch wie ursprünglich angedacht, mit SQL Sequenzen arbeiten.

viele Grüße

Werner