Deseo recuperar una lista de todos los esquemas en una base de datos de servidor Sql determinada. Utilizando la API de recuperación de esquemas ADO.NET
obtengo una lista de todas las colecciones, pero no hay ninguna colección para 'Esquemas'. Podría atravesar las colecciones 'Tables'
, 'Procedures'
(y otras si es necesario) y obtener una lista de nombres de esquema únicos, pero ¿no hay una forma más fácil/más corta de lograr el mismo resultado?¿Cómo obtengo una lista de todos los esquemas en una base de datos del servidor Sql?
Ejemplo: Para la base de datos estándar 'AdventureWorks'
Me gustaría también obtener la siguiente lista - dbo,HumanResources,Person,Production,Purchasing,Sales
(he omitido los nombres de otros Schem estándar como db_accessadmin
, db_datareader
etc)
Editar: Puedo obtener la lista de esquemas al consultar la vista del sistema: INFORMATION_SCHEMA.SCHEMATA
, pero preferiría utilizar la API de esquema como primera opción.
Intenté usar esto en un servidor SQL 2000, pero no obtuve todos los esquemas devueltos. Alguien sabe por qué pasa esto? – evilfish
No tengo una instancia de 2000 para probar, ¡y pensé que * I * era una verdadera percha! Recuerde que 2000 no tiene "esquemas" reales como las versiones posteriores, por lo que lo que realmente está enumerando son los roles. Pruebe con 'SELECT * FROM sysusers' y vea si ve los identificadores que está buscando. – harpo
Lo leí y SELECCIONAR * FROM INFORMATION_SCHEMA.SCHEMATA en realidad no es una buena idea para usar en cuanto dicen las fuentes que leí. Un método mucho mejor es ejecutar el procedimiento almacenado de la tabla maestra "sp_databases". Funciona tanto para 2000 como para 2005 (probado ambos), y en mi caso devolvió el resultado correcto cada vez. – evilfish