Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> SQL (Server 2008) Inkrementacja od danej liczby
szuki
post 22.10.2012, 23:01:47
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2012

Ostrzeżenie: (0%)
-----


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.

Ten post edytował szuki 22.10.2012, 23:02:47
Go to the top of the page
+Quote Post
mmmmmmm
post 23.10.2012, 07:10:34
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 3.05.2024 - 22:10