سؤال

هل هناك طريقة لتأمين صف في قاعدة بيانات SQL 2005-2008 دون بدء معاملة، بحيث لا تتمكن العمليات الأخرى من تحديث الصف حتى يتم إلغاء تأمينه؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام RowLock أو تلميحات أخرى ولكن يجب أن تكون كذلك حذر..

سيقوم تلميح HOLDLOCK بإرشاد SQL Server للاحتفاظ بالتأمين حتى تقوم بتنفيذ المعاملة.سيقوم تلميح ROWLOCK بتأمين هذا السجل فقط ولن يصدر قفل صفحة أو جدول.

سيتم أيضًا تحرير القفل في حالة إغلاق الاتصال أو انتهاء المهلة.سأكون حذرًا جدًا في القيام بذلك لأنه سيوقف أي عبارات SELECT التي تؤدي إلى توقف هذا الصف في مساراتها.يحتوي SQL Server على العديد من تلميحات القفل التي يمكنك استخدامها.يمكنك رؤيتها في Books Online عند البحث عن HOLDLOCK أو ROWLOCK.

نصائح أخرى

كل ما تقوم بتنفيذه في الخادم يحدث في معاملة، سواء كانت ضمنية أو صريحة.

لا يمكنك ببساطة قفل صف بدون أي معاملة (اجعل الصف للقراءة فقط).يمكنك جعل قاعدة البيانات للقراءة فقط، وليس صفًا واحدًا فقط.

اشرح غرضك وقد يكون حلاً أفضل.مستويات العزل وتلميحات القفل و إصدار الصف.

هل تحتاج إلى قفل أ صف, ، أو ينبغي أقفال تطبيق Sql Server افعل ما تحتاجه؟

أقفال التطبيقات هي مجرد قفل باسم يمكنك "قفله" و"فتحه" والتحقق من قفله.انظر الرابط أعلاه للحصول على التفاصيل.(يتم إلغاء قفلها إذا تم إغلاق اتصالك وما إلى ذلك، لذا اتجه إلى تنظيف نفسها)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top