Enumeración de bases de datos existentes en un servidor tabular (AMO-TOM)
Se aplica a:
SQL Server 2016 y versiones posteriores Analysis Services
Azure Analysis Services
Power BI Premium
Si tiene un objeto Server que está conectado a una instancia de servidor, puede recorrer en iteración la colección Server.Databases para enumerar todas las bases de datos hospedadas por la instancia.
La colección Server.Databases contiene un objeto Database por cada base de datos hospedada en el servidor, independientemente del modo de servidor.
Puede comprobar el tipo de base de datos a través de la propiedad Database.StorageEngineUsed .
Las bases de datos tabulares 1200 y posteriores devolverán una propiedad Database.Model que no sea NULL que proporciona acceso a todos los objetos de metadatos tabulares: tablas, columnas, relaciones, entre otros.
Para multidimensionales o tabulares 1103 y siguientes, la propiedad Database.Model será NULL. En este caso, los metadatos no tabulares estarán disponibles en propiedades multidimensionales (como Database.Cubes y Database.Dimensions), pero esas propiedades solo las expone la clase Microsoft.AnalysisServices.Database (de AMO), no Microsoft.AnalysisServices.Tabular.Database (para TOM). Para obtener más información sobre la clase Database que se va a usar, vea Instalar, distribuir y hacer referencia a la biblioteca cliente tom.
A menos que Database.StorageEngineUsed esté establecido en TabularMetadata, no podrá usar otras clases del espacio de nombres tabular para acceder al árbol del modelo o manipularlo.
En la tabla siguiente se resumen los comportamientos esperados al conectarse a un servidor o base de datos mediante una clase Microsoft.AnalysisServices.Tabular en un servidor o base de datos.
| mode | Database.model | Database.StorageEngineUsed |
|---|---|---|
| Tabular 1200 y versiones posteriores | Devuelve el nombre del modelo. | StorageEngineUsed.TabularMetadata |
| Tabular 1103, 1100, 1050 | Devuelve null | StorageEngineUsed.InMemory |
| Multidimensional | Devuelve null | StorageEngineUsed.Traditional |
Ejemplo de código: Enumeración de bases de datos existentes
El código siguiente muestra cómo conectarse al servidor y enumerar las bases de datos hospedadas por el servidor.
using System; using Microsoft.AnalysisServices;
using Microsoft.AnalysisServices.Tabular;
namespace TOMSamples
{
class Program
{
static void Main(string[] args)
{
//
// Connect to the local default instance of Analysis Services
//
string ConnectionString = "DataSource=localhost";
//
// The using syntax ensures the correct use of the
// Microsoft.AnalysisServices.Tabular.Server object.
//
using (Server server = new Server())
{
server.Connect(ConnectionString);
//
// List common properties for the databases on the server.
//
foreach (Database db in server.Databases)
{
Console.WriteLine("Properties for database {0}:", db.Name);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Database ID:\t\t\t{0}", db.ID);
Console.WriteLine("Database compatibility level:\t{0}", db.CompatibilityLevel);
Console.WriteLine("Database collation:\t\t{0}", db.Collation);
Console.WriteLine("Database created timestamp:\t{0}", db.CreatedTimestamp);
Console.WriteLine("Database language ID:\t\t{0}", db.Language);
Console.WriteLine("Database model type:\t\t{0}", db.ModelType);
Console.WriteLine("Database state:\t\t\t{0}", db.State);
Console.ResetColor();
Console.WriteLine();
}
}
Console.WriteLine("Press Enter to close this console window.");
Console.ReadLine();
}
}
}
Obtener un elemento de una base de datos
El siguiente fragmento de código muestra cómo obtener una columna tabular o de una base de datos.
var db = srv.Databases.GetByName("abc");
Column c1 = db.Model.Tables["foo"].Columns["bar"];
if (c1.ObjectType == ObjectType.Column) // always true
MetadataObject obj;
switch(obj.ObjectType)
{
case ObjectType.Table:
var t1 = (Table)obj;
break;
}