Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Този прост код създава безизходица. Включена проста примерна програма

Вашите две изявления придобиват заключвания на редове в различен ред. Това е класически случай за безизходици. Можете да коригирате това, като се уверите, че редът на взетите брави винаги е в някакъв глобален ред (например подреден по ID). Вероятно трябва да обедините двата UPDATE изрази в едно и сортирайте списъка с идентификатори на клиента, преди да го изпратите на SQL Server. За много типични UPDATE планове, това всъщност работи добре (не е гарантирано обаче).

Или добавяте логика за повторен опит, в случай че откриете блокиране (SqlException.Number == 1205 ). Това е по-елегантно, защото не изисква по-дълбоки промени в кода. Но блокиранията имат отражение върху производителността, така че правете това само за ниски нива на блокиране.

Ако вашата паралелна обработка генерира много актуализации, можете да INSERT всички тези актуализации във временна таблица (което може да се направи едновременно) и когато сте готови, изпълнявате едно голямо UPDATE който копира всички отделни записи за актуализиране в главната таблица. Просто променяте източника на присъединяване във вашите примерни заявки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQl сървър Трябва да коригирам грешката за изтичане на времето за изчакване. Периодът на изчакване изтече

  2. TSQL проверява дали съществува конкретна последователност от редове

  3. Създаване на нова база данни от резервно копие на друга база данни на същия сървър?

  4. Използвайте OBJECTPROPERTY(), за да разберете дали даден обект е ограничение CHECK в SQL Server

  5. Невалиден параметър за дължина, предаден на функцията RIGHT