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
这里的列名是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。