سؤال

أقوم بإنشاء آلية SQL (في MSSQL 2005) والتي تسمح لمستخدم واحد فقط في كل مرة بتعيين الحقل في جدول معين.إذا تم تعيين هذا الحقل، فلن يتمكن أي شخص آخر من مسحه (تم تعيينه على NULL).إذا لم يكن الأمر كذلك، فسيتم تعيين هذا الحقل على something unique for the user's session.كمرشح جيد master.dbo.sysprocesses.sid يبحث عني، لكني لست متأكدًا من ذلك.

أحتاج إلى التأكد من أنه عند تعطل تطبيق العميل الخاص بالمستخدم (والذي سيستخدم هذه الآلية)، سيتم مسح الحقل حتى يتمكن مستخدمون آخرون من استخدامه.أفكر في بعض مهام التصفية، والتي ستتحقق مما إذا كانت جلسة المستخدم التي قامت بتعيين هذا الحقل نشطة حتى الآن، وإذا لم تكن كذلك، فقم بمسحها (بالطبع فقط عندما لا يكون الحقل فارغًا).

هل يوجد عمود فريد في عمليات master.dbo.sys لكل جلسة مستخدم دون إعادة استخدام نفس القيمة لاحقًا؟

شكرًا جزيلاً

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

المحلول

يحدد spid أي اتصال/جلسة.لا أكثر ولا أقل.لن تحتوي أي جلسة أخرى على هذا spid.

ويمكنك استخدام @@SPID لذلك بدلاً من عمليات النظام.

يحرر:sid ليس فريدًا لأنه يمكن للمستخدم إجراء عدة جلسات مستمرة.

أعتقد أننا بحاجة إلى مزيد من المعلومات لتقديم اقتراح.

أشعر بالقلق من أن تطبيقك سوف يتعطل كثيرًا بما يكفي ليحتاج إلى هذا الحل لمسح هذا القفل الحصري...

تحرير 2:سيكون وقت تسجيل الدخول قابلاً للاستخدام أيضًا بناءً على التعليقات

نصائح أخرى

spid ليست فريدة من نوعها.أحيانًا أرى 10 أو أكثر من spids متساوية على الخادم الخاص بي (يحدث ذلك بسبب التوازي).

حاول spid + kpid.

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