Часто, при разработке приложений возникает необходимость предоставить возможность выбора базы данных.
При этом будет красиво, если в списке не будет системных и отключенных (остановленных) баз.
Со вторым все очень просто: в статусе проверяем нужный бит на наличие,
и если он установлен, то база остановлена (первое условие в примере).
А вот определения именно системности базы я не нашел. Поэтому предлагаются следующие решения (для второго условия):
- Проверять поле sid - здесь кодируется владелец (Owner) базы,
так вот для пользователя sa он равен 1. У нас только системные таблицы имеют пользователя sa,
поэтому это решение нам подошло.
- Проверять поле dbid - идентификатор базы, для несистемных он более 5 (на нашем сервере),
Думаю на других тоже. Так что выбирайте, что больше нравится.
- Исключить системные базы по именам. Мне этот подход совсем не нравится.
Я знаю, что в Books-OnLine рекомендуют пользоваться INFORMATION_SCHEMA, а не прямым обращением в системные таблицы,
но в данном случае INFORMATION_SCHEMA.SCHEMATA работает скажем так "странно".
Поэтому решение было выбрано такое:
SELECT * FROM sysdatabases WHERE status&100000=0 AND sid<>1 ORDER BY name
SELECT CAST(GETDATE() as DATE)