!Рекомендую сначала сделать физическую копию файлов БД (mdf,ldf)!
Как вариант определить битые таблицы по ID, и попробовать Checktable на конкретных таблицах сначала Repair_rebuild, если СУБД ответит что минимальный уровень - REPAIR_ALLOW_DATA_LOSS , значит сделать Checktable(<ПутьКТаблице>,REPAIR_ALLOW_DATA_LOSS ). Покоцанные страницы таблиц будут очищены, но те, что не покоцаны, должны стать доступны для работы (часть данных потеряется, но БД должна стать доступна для работы).
Если определить битые таблицы по ID - проблематично (по каким-то причинам) можно сразу на БД зарядить :
DBCC CheckDB (<ИМЯБД>, REPAIR_ALLOW_DATA_LOSS).
Т.е. скрипт примерно такой:
USE ИмяБД;
GO
--(Далее выполнять поочереди)
EXEC sp_resetstatus 'ИмяБД'
GO
ALTER DATABASE 'ИмяБД' SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
--Попробовать:
DBCC CHECKALLOC (ИмяБД, REPAIR_REBUILD) WITH NO_INFOMSGS
GO
--Если СУБД сообщит, что для исправления ошибок - минимальный уровень
--REPAIR_ALLOW_DATA_LOSS тогда:
DBCC CheckDB (ИмяБД, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS
GO
ALTER DATABASE ИмяБД SET MULTI_USER
GO