Martin Smith es correcto decir que sp_MSforeachtable
no borra las tablas del sistema.
Sin embargo, aunque podemos pensar en tablas como spt_values
y MSreplication_options
como tablas del sistema, en realidad son tablas de usuario de acuerdo con SQL Server.
Cuando funciono con esta pregunta en mi base de datos maestra:
SELECT name, OBJECTPROPERTY(object_id, N'IsUserTable') AS IsUserTable
FROM master.sys.tables;
veo el siguiente conjunto de resultados:
name IsUserTable
--------------------- -----------
spt_fallback_db 1
spt_fallback_dev 1
spt_fallback_usg 1
spt_monitor 1
MSreplication_options 1
Entonces, ¿cómo se Stijn salvados de una reinstalación?
Si nos fijamos en cómo se implementa sp_MSforeachtable
, verá que hace algo como esto para seleccionar las tablas a caer:
declare @mscat nvarchar(12)
select @mscat = ltrim(str(convert(int, 0x0002)))
SELECT *
from dbo.sysobjects o join sys.all_objects syso on o.id = syso.object_id
where OBJECTPROPERTY(o.id, N'IsUserTable') = 1 and o.category & @mscat = 0;
En mi base de datos maestra, este devuelve un conjunto de resultados vacío.
La cláusula where aplica una máscara de bits a la columna category
de la tabla sysobjects
para excluir las tablas que no son 'mscat
'.
Por lo tanto, las tablas en la base de datos maestra están protegidas, no porque sean tablas del sistema, sino porque son tablas 'Microsoft'.
Este uso de la columna de la categoría es completamente indocumentado en Books Online Todo lo que tiene es una vaga descripción:
utilizado para la publicación, las limitaciones y la identidad.
Pero la tabla sysobjects
está obsoleta de todos modos, por lo que no debería usarla. :)
Una consulta equivalente utilizando la vista apoyado sys.tables
se vería así:
SELECT *
FROM sys.tables
WHERE is_ms_shipped = 0;
En mi base de datos maestra, esto también devuelve un conjunto de resultados vacío.
Restaure su copia de seguridad más reciente del DB maestro. Usted tiene uno, ¿verdad? –
No tengo uno. Es un DB de desarrollo personal sin datos críticos, así que lo peor que puede pasar es que tengo que volver a instalar SQL Server. – Stijn
SQL Server Studio, ¿verdad? –