在內容資料庫中查詢某個列表中的列的值
阿新 • • 發佈:2019-02-01
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部分替換成正確的值。在我的環境裡,執行的結果只這樣的:
這裡的列名是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。