Sharepoint 使用内容数据库更新内部名称

Sharepoint 使用内容数据库更新内部名称,sharepoint,sharepoint-2007,wss-3.0,Sharepoint,Sharepoint 2007,Wss 3.0,我们当前有一个字段的ID错误。Sharepoint字段的ID和内部名称在域模型上是只读的。我想知道是否有一种方法可以通过使用内容数据库来更新它们 一个可靠的方法是删除字段并重新创建它。但它已经有了数据,有数千页。我想知道是否有一种方法可以只更新ID和内部名称而不删除和重新创建字段 谢谢即使有用,也不要做。 它是: 危险,因为您可能会跳过依赖项 不支持 使用一些脚本重新创建字段以保存数据更安全。我们遇到了同样的问题。搞乱DB不是我们的选择(也不应该是你们的),但你们可以解决它。不幸的是,需要触

我们当前有一个字段的ID错误。Sharepoint字段的ID和内部名称在域模型上是只读的。我想知道是否有一种方法可以通过使用内容数据库来更新它们

一个可靠的方法是删除字段并重新创建它。但它已经有了数据,有数千页。我想知道是否有一种方法可以只更新ID和内部名称而不删除和重新创建字段


谢谢

即使有用,也不要做。
它是:

  • 危险,因为您可能会跳过依赖项
  • 不支持

使用一些脚本重新创建字段以保存数据更安全。

我们遇到了同样的问题。搞乱DB不是我们的选择(也不应该是你们的),但你们可以解决它。不幸的是,需要触摸每个页面才能更新元数据

首先,创建列,就像它应该在列表中一样。然后,可以通过多种方式将数据从旧列复制到新列:

  • 数据表视图
  • 通过web服务编程(不需要访问服务器)
  • 通过控制台应用程序编程(需要在服务器上本地运行)
  • 老实说,编写一个小型控制台应用程序将是最快的。例如:

    string siteUrl = "http://server/sitecollection/";
    string webUrl = "subsite1/subsite2/";
    string listName = "Your List Name";
    using (SPSite site = new SPSite(siteUrl))
    {
        using (SPWeb web = site.OpenWeb(webUrl))
        {
            SPList list = web.Lists[listName];
            foreach (SPListItem item in list.Items)
            {
                item["New_x0020_Column_x0020_Name"] = item["Old_x0020_Column_x0020_Name"];
            }
        }
    }
    

    另外,它强烈建议首先在开发环境中尝试这一点。只需从您的生产环境执行STSADM恢复并测试您的控制台应用程序。然后,验证数据并删除旧列

    我不建议修改内容数据库,因为它是:

    • 不受支持(如果您这样做,即使您有MS Premier支持,Microsoft也不会在您真正遇到麻烦时帮助您)
    • 做起来很复杂。您必须更新许多表,而且您永远无法确定是否确实更新了所有必需的内容
    您可以尝试执行的操作-查看内部名称属性实际上是“只读”还是定义为“friend”,并且无法从其他代码程序集调用它。如果是后一种情况,则可以使用.Net反射来设置属性值。请参阅此以了解详细信息