Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SQL (Server 2008) Inkrementacja od danej liczby
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
szuki
Witam, mam mały problem.

Napisałem skrypt, który pobiera mi z bazy MS SQL dane rekordy, o określonym warunku, po czym chciałbym dodać je do pewnej tabeli. Wszystko jest ok, ale nie wiem jak rozwiązać sprawę inkrementacji. Domyślnie tabela nie ma ustawionego autoInc, no i tak musi zostać. Chciałbym aby pierwszy dodany rekord miał id 1002, a później adekwatnie o +1.

  1. $tsql = "SELECT [au_Id] FROM [ebalDB].[dbo].[au__Auction] WHERE [au_State] = 0";
  2.  
  3. $stmt = sqlsrv_query( $conn, $tsql);
  4. if( $stmt === false )
  5. {
  6. echo "Błąd w zapytaniu.</br>";
  7. die( print_r( sqlsrv_errors(), true));
  8. }
  9. echo "<table border='0' cellpadding='10'> ";
  10. while ($row = sqlsrv_fetch_array($stmt)) {
  11.  
  12. echo "<tr><td>" . $row[0] . "</td></tr>";
  13.  
  14. $tsql1 = "INSERT INTO [ebalDB].[dbo].[au_CategorySpecific]
  15. ([as_Id]
  16. ,[as_AuctionId]
  17. ,[as_FieldId]
  18. ,[as_vint]
  19. ,[as_vmoney]
  20. ,[as_vdatetime]
  21. ,[as_vvarchar])
  22. VALUES
  23. (?,?,?,?,?,?,?);";
  24.  
  25. $params = array($row[0],$row[0],19933,1,Null,Null,Null);
  26.  
  27. $stmt1 = sqlsrv_query($conn, $tsql1, $params);
  28. if( $stmt1 === false )
  29. {
  30. echo "Coś poszło nie tak w dodawaniu rekordu";
  31. die( print_r( sqlsrv_errors(), true));
  32. }
  33.  
  34. }
  35. echo "</table> ";


Co w takim przypadku zrobić? Przed dodaniem mam pobierać największe id, a następnie zapisać do zmiennej (następnie +1), a dopiero później wynik tego podać w insercie? Czy może są lepsze sposoby?

Pozdrawiam i z góry dziękuję za wszelkie sugestie.
mmmmmmm
1. Czemu nie ma IDENTITY? I czemu tak musi zostać ? (jakaś bzdura)
2. Nie możesz " pobierać największe id, a następnie zapisać do zmiennej (następnie +1), a dopiero później wynik tego podać w insercie", bo pomiędzy pobraniem a zapisaniem ktoś inny może zrobić to samo i będziesz miał duble...
3.
  1. // linie 14-25
  2. $tsql1 = "INSERT INTO [ebalDB].[dbo].[au_CategorySpecific]
  3. ([as_Id]
  4. ,[as_AuctionId]
  5. ,[as_FieldId]
  6. ,[as_vint]
  7. ,[as_vmoney]
  8. ,[as_vdatetime]
  9. ,[as_vvarchar])
  10. SELECT Coalesce(Max(au_Id),0)+1, Coalesce(Max(au_Id),0)+1,?,?,?,?,? FROM [ebalDB].[dbo].[au__Auction] WHERE [au_State] = 0";
  11.  
  12. $params = array(19933,1,Null,Null,Null);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.