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.
if ( sqlsrv_begin_transaction( $conn ) === false ) {
die( print_r( sqlsrv_errors(), true ));
}
$orderId = 1; $qty = 10; $productId = 100;
$sql1 = "INSERT INTO OrdersTable (ID, Quantity, ProductID)
VALUES (?, ?, ?)";
$params1 = array( $orderId, $qty, $productId );
$stmt1 = sqlsrv_query( $conn, $sql1, $params1 );
$sql2 = "UPDATE InventoryTable
SET Quantity = (Quantity - ?)
WHERE ProductID = ?";
$params2 = array($qty, $productId);
$stmt2 = sqlsrv_query( $conn, $sql2, $params2 );
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