شير: SQL للعثور على جميع المستندات التي تم إنشاؤها / تم بواسطة المستخدم

StackOverflow https://stackoverflow.com/questions/281373

  •  07-07-2019
  •  | 
  •  

سؤال

وأنا أبحث عن استعلام التي ستعمل على شير 2003 لتريني كل المستندات التي تم إنشاؤها / لمسها من قبل هوية المستخدم معينة.

ولقد وجدت الجداول مع المستندات (مستندات) والجداول للمستخدمين (المعلومات حول المستخدم، بيانات المستخدمين) ولكن العلاقة بين تبدو غريبة بعض الشيء - هناك 99،000 السجلات في جدول بيانات المستخدمين لدينا، و 12،000 السجلات في المعلومات حول المستخدم - لدينا 400 مستخدم

!

وأعتقد أنني أتوقع بسيط 1 إلى العديد من علاقة مع الجدول المستخدم وجود 400 السجلات وينضم ذلك إلى طاولة الوثائق، ولكن أرى أن ليس في القضية.

وسيكون موضع تقدير أي مساعدة.

وتحرير: بفضل بيورن، لقد ترجم هذا الاستعلام إلى هيكل شير 2003:

select 
d.* from 
userinfo u join userdata d 
on u.tp_siteid = d.tp_siteid  
and 
u.tp_id = d.tp_author 
where
u.tp_login = 'userid' 
and
d.tp_iscurrent = 1

وهذا يحصل لي قائمة من siteid / listid / في tp_id سوف ننتظر لنرى ما اذا كان يمكنني تتبع تلك العودة إلى اسم الملف / المسار. جميع: أي مساعدة إضافية لا تزال موضع تقدير

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

المحلول

ولقد نسي في قاعدة البيانات في SharePoint 2003، لكن في عام 2007 تم توصيل المعلومات حول المستخدم إلى مواقع، مما يعني أن كل مستخدم لديه على التوالي في المعلومات حول المستخدم لكل مجموعة الموقع (أو مفهوم ما يعادل 2003). وذلك لتحديد ما يقوم المستخدم تحتاج كل هوية الموقع ومعرف المستخدم في هذا الموقع. في عام 2007، وأود أن تبدأ مع شيء من هذا القبيل:

select d.* from userinfo u 
join alluserdata d on u.tp_siteid = d.tp_siteid 
and u.tp_id = d.tp_author 
where u.tp_login = '[username]'
and d.tp_iscurrentversion = 1

تحديث: كما الآخرين إرسال هنا، فمن غير المستحسن أن تذهب مباشرة إلى قاعدة بيانات SharePoint، ولكن أود أن أقول استخدام رأسك وتوخي الحذر. التحديثات هي كل مباراة دولية، لا لا، ولكن يختار تعتمد على السياق.

نصائح أخرى

ولا الاستعلام عن قاعدة بيانات SHAREPOINT مباشرة!

وأنا أتساءل عما إذا كان جعل ذلك واضحا بما فيه الكفاية؟ :)

وأنت حقا بحاجة الى ان ننظر في نموذج كائن متوفر في C #، وسوف تحتاج إلى الحصول على مثيل SPSite لSiteCollection، ومن ثم تكرار عبر حالات SPList التي تنتمي إلى SPSite والكائنات SPWeb.

وبمجرد الانتهاء من وجوه SPList، سوف تحتاج إلى استدعاء GetListItems باستخدام استعلام مرشحات للمستخدم الذي تريد.

وهذا هو طريقة معتمدة من فعل ما تريد.

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

وعندما تنظر إلى طراز كائن للتكرار، لاحظ أيضا أنك لن تحتاج إلى التخلص () الكائنات SPSite وSPWeb التي تقوم بإنشائها.

وأوه، ونعم قد يكون لديك 400 مستخدم، ولكن أود أن الرهان على أن لديك 30 موقعا. تكرار المعلومات في قاعدة البيانات في الموقع ... 30 × 400 = 12000 الإدخالات في قاعدة البيانات.

إذا كنت تنوي استخدام هذا الاستعلام في شير يجب أن نعرف أن خلق وجهات النظر حول قاعدة بيانات المحتوى أو quering مباشرة على قاعدة بيانات يبدو أن كبيرة لا لا. ويمكن أن يكون الحل بعض التعليمات البرمجية المخصصة التي تتكرر من خلال نموذج كائن ويكتب النتائج إلى قاعدة البيانات الخاصة بك. وهذا يمكن أن يكون إما الموقت أساس أو على أساس eventtrigger.

وكنت حقا لا ينبغي القيام يختار مع أقفال إما أي إضافة مع (NOLOCK) على الاستفسارات الخاصة بك. بعض أجزاء من النظام هي مهلة جدا حساسة وإذا كنت تبدأ إدخال أقفال أن النظام لا تتوقع ترون النظام يفزع.

ولكن في الحقيقة، يجب أن تقوم به هذه عبر نموذج كائن. تسكع مع شيء من هذا القبيل و IronPython والتجريب مع OM تكاد تكون ممتعة بصراحة.

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