Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zrozumienie limitów czasu transactionscope

Spróbuj spojrzeć na to w ten sposób:

Długość transakcji jest określana tylko wtedy, gdy wywołasz trans.Complete() lub wyjdziesz z zakresu transakcji. Weź następujący kod:

using (var trans= new TransactionScope())
{
Threading.Sleep(99999);
trans.Complete()
}

Nie ma możliwości wyrzucenia wyjątku limitu czasu podczas rutyny uśpienia i nie miałoby to sensu, gdyby tak się stało. Tak więc użycie limitów czasu transakcji (przynajmniej w ten sposób) może zagwarantować tylko, że jeśli transakcja potrwa dłużej niż twój limit czasu, nie zostanie zatwierdzona.

Jeśli wykonujesz tylko jedno zapytanie (którego nie wiem, do czego używasz transakcji), możesz ustawić limit czasu zapytania / polecenia (lub jakkolwiek to nazwiesz). IIRC, Twoje zapytanie powróci natychmiast po wygaśnięciu limitu czasu.

Innym sposobem byłoby ustawienie limitu czasu żądania usługi sieciowej i założenie, że usługa sieciowa zbyt długo odpowiada z powodu tego, co było w transakcji.

EDYCJA:Możesz spróbować:

  • Tworzenie transakcji w innym wątku, a następnie czekanie na jej zakończenie (przy użyciu Thread.Join(timeout)) w głównym wątku (używanym przez wywołanie usługi internetowej). Więc jeśli nie zakończy się przed określonym przez Ciebie limitem czasu, możesz przestać czekać i zwrócić błąd limitu czasu (nie zapomnij zasygnalizować innemu wątkowi przerwania transakcji).
  • Zakładając, że wykonujesz zapytania SQL tylko w ramach tych transakcji, możesz użyć słowa kluczowego „BEGIN TRANSACTION”, aby określić transakcję w skrypcie sql (rzeczywiście dziwaczne). Następnie możesz po prostu określić limit czasu polecenia i wykonać to wszystko w jednym wierszu kodu. Ale to wymaga przeniesienia wszystkiego, co robisz w ramach transakcji, do skryptu sql, co może, ale nie musi być dla Ciebie możliwe... i nie jest czysty.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zainstaluj Azure Data Studio na Ubuntu 18.04

  2. Jak mogę wypełnić kolumnę liczbami losowymi w SQL? Otrzymuję tę samą wartość w każdym rzędzie

  3. Rekurencyjne łączenie elementów nadrzędnych

  4. Jak mogę ulepszyć tę instrukcję SELECT w adresie pocztowym serwera SQL?

  5. Zaktualizuj, jeśli nazwa istnieje, w przeciwnym razie wstaw - w SQL Server