Wir haben vor kurzem bei gleichzeitiger Einsätze in einem unserer sal Server-Tabellen von mehreren Clients ein Problem konfrontiert sind. Ich hoffe ihr könnt uns helfen.SQL Server - Gleichzeitige Inserts auf den Tisch von mehreren Clients - Überprüfen End- und Block
Wir verwenden Stored Procedure die Transaktionen zu tun. In dieser gespeicherten Prozedur berechnen wir für jede Transaktion den Gesamtumsatz bisher. Wenn der Gesamtumsatz weniger als das festgelegte Limit ist, wird die Transaktion erlaubt, . Andernfalls wird die Transaktion abgelehnt.
es funktioniert die meiste Zeit. Aber manchmal, wenn mehrere Clients versuchen, die Transaktion genau zur gleichen Zeit auszuführen, schlägt die Grenzwertprüfung fehl, da beide Transaktionen ausgeführt werden.
Können euch vorschlagen, wie wir effektiv die Grenze die ganze Zeit durchsetzen können? Gibt es einen besseren Weg, das zu tun?
Danke!
Bitte geben Sie Ihre Tabellenstruktur und Beispieldaten an. Ist das eingestellte Limit für alle Transaktionen konstant? –
Als eine Ahnung könnte das Problem gelöst werden, wenn Sie die gespeicherte Prozedur viel schneller ausführen. Bei einer gespeicherten 100-ms-Prozedur sind Kollisionen äußerst selten. Wenn Sie die Abfrage und die Tabellendefinition veröffentlichen, können Sie einen Index vorschlagen, der die Gesamtberechnung sehr schnell macht. – Andomar
finden Sie die Tabellenstruktur. In dieser Summe (Einsatz) sollte für jede Betnummer 1000 nicht überschritten werden. Diese 1000 Grenze wird in einer anderen Tabelle gespeichert. \t [SlipID] [Bigint] IDENTITY (1,1) NOT NULL, \t [TillID] [int] NOT NULL, \t [Barcode] [varchar] (30) NOT NULL, \t [GamingDate] [Datum] NOT NULL, \t [DrawID] [int] NOT NULL, \t [BetNumber] [Tinyint] NOT NULL, \t [CurrencyID] [int] NOT NULL, \t [Stake] [dezimal] (9, 2) NOT NULL , \t \t [SlipTime] [Datetime] NOT NULL, – sammy