在内容数据库中查找某个列表中的列的值

        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部分替换成正确的值。在我的环境里,执行的结果只这样的:

在内容数据库中查找某个列表中的列的值_第1张图片

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


你可能感兴趣的:(column,database,SharePoint,content)