Llevo unos meses dando varios cursos de Administración de SharePoint 2010 y cuando sale el tema del SQL Server suelo insistir bastante en que debería de ser transparente para nosotros, que no debemos tocar nada en él, salvo administrar las bases de datos, monitorizar el rendimiento y poner los planes de mantenimiento adecuados en las bases de datos.
La semana de uno de los cursos, nos encontramos con un error grave en una máquina virtual de desarrollo. Estábamos creando un tipo de contenido desde Visual Studio y nos equivocamos con uno de los tipos de los campos. Sin darnos cuenta, hicimos el deploy y el campo se creó, pero no era capaz de añadirlo a la lista porque la definición de este era incorrecta. Nos equivocamos al escribir el tipo de campo elección y pusimos Choise.
Si vamos a la galería de columnas de sitio para eliminarla nos encontramos con el siguiente error que indica que el campo Choise no está instalado correctamente y que lo tenemos que eliminar.
¿Pero si eso mismo estaba intentando hacer? Nada, que vamos a ver si tiramos de Powershell para eliminar el campo y obtenemos un error parecido al intentar obtener el campo para eliminar. Para esto obtenemos la colección de sitios (Get-SPWeb) y intentamos obtener las columnas de sitio con el siguiente error al intentar mostrar la información del campo erróneo.
Solución
Pues, aunque me duela decir esto, no nos queda otra que buscar en la base de datos de contenido la definición de la columna y eliminarla. Para obtener la base de datos de contenido, usando Powershell, utilizamos el objeto Get-SPWeb y accedemos al Site.ContentDatabase
$web = Get-SPWeb http://intranet.contoso.com
$web.Site.ContentDatabase
Id : e5c5e20a-5a9f-406c-b9f6-28923750cecd
Name : WSS_Content_e58f8446cde041318a305696f040d32a
WebApplication : SPWebApplication Name=Intranet
Server : demo2010a
CurrentSiteCount : 20
Nos vamos al SQL Server Management Studio y ejecutamos el siguiente query en la tabla ContentTypes buscando por la IDde la columna:
SELECT * FROM ContentTypes WHERE Definition LIKE ('%ID DEL CAMPO%')
y ahora, CON MUCHO CUIDADO, eliminamos esa fila para que podamos volver a tener nuestra galería de columnas de sitio y de tipos de contenido funcionando correctamente.
Importante
- No hacer el DELETE sin hacer previamente la consulta, te puede pasar que elimines 36 filas sin darte cuenta
- Realizar un Backup de la base de datos de contenido antes de tocar nada.
- No realizar estas pruebas en SharePoint Online sin haber probado completamente la solución en un servidor de desarrollo. En SharePoint Online no tenemos acceso al SQL Server para eliminar la definición de columna incorrecta.