1. 程式人生 > >在內容資料庫中查詢某個列表中的列的值

在內容資料庫中查詢某個列表中的列的值

        SharePoint把使用者列表中的資料都儲存在content database的AllUserData表中。這個表預先建立了很多的列,例如可以儲存文字的nvarchar1,... nvarchar64, ntext1 ... ntext16,還有可以儲存int型資料的,還有datetime型資料的列等等。當用戶在SharePoint的list中建立一個column,SharePoint就會根據這個column的型別,為這個column分配一個數據表中的列,因此每一個list中的column都對應一個AllUserData表中的列。

        所以首先需要確定list中的某個列所對應的資料庫表中的列,這個可以通過SharePoint Management Shell來找到。執行以下命令:

$web = Get-SPWeb "web url"
$list = $web.Lists["list name"]
$list.Fields["column name"] | Select-Object Id,SourceID,Title,TypeDisplayName,ParentList,InternalName,SchemaXmlWithResourceTokens

        請把其中的web url, list name和column name部分替換成正確的值。在我的環境裡,執行的結果只這樣的:

image

這裡的列名是Notes,被選中的部分是ColName="ntext2"。這個屬性說明在資料庫中,列Notes對應的列名是"ntext2".

找到了對應的列名,就可以在資料庫中執行以下SQL語句,將這個列中的資料查找出來了:

select AllLists.tp_Title as 'List Title', AllLists.tp_ID as 'List ID', 
ALlUserData.tp_ID as 'Item ID',
nvarchar1 as 'Item Title', ntext2
from AllLists inner join AllUserData on ALlLists.tp_ID = AllUserData.tp_ListId
where AllLists.tp_Title = 'list name'
SQL語句需要連線兩個表,一個是AllLists, 一個是AllUserData。如果列表是一個文件庫,AllUserData表中的nvarchar7通常是文件的title,如果是一個普通列表,那麼AllUserData表中的nvarchar1通常是item的title。