运行 来自命令行的 xmla 文件 (Analysis Services)
Run xmla file (Analysis Services) from command line
我正在寻找 运行 xmla 脚本(创建或删除多维数据集示例)的工具或简单方法。我曾经使用 Inno Setup
程序制作 exe 文件,在那里我可以编写命令,它可以 运行 另一个 exe 文件,就像在命令行中一样。
我发现有ascmd.exe
(Readme For Ascmd Command-line Utility Sample)这样的工具。但它曾用于旧版本的 MS SQL。 MS SQL Server 2012 和更新版本还有其他版本吗?
我可以说我没有使用 ascmd.exe
工具,因为我无法获得此工具(我无法从此处用 C# 编译项目:Readme For Ascmd Command-line Utility Sample)。
我建议您从以下网址下载 ASCMD_StressTestingScripts(其中包含 Ascmd.exe):
https://sqlsrvanalysissrvcs.codeplex.com/releases
然后在与Ascmd.exe相同的目录下创建一个Ascmd.exe.config文件,内容如下。这将导致它使用 SQL 2014。如果你想要 SQL 2012,则将 12.0.0.0 更改为 11.0.0.0:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.AnalysisServices" publicKeyToken="89845dcd8080cc91" />
<bindingRedirect oldVersion="10.0.0.0" newVersion="12.0.0.0" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我用 C# 编写了自己的 exe 文件,我可以从命令行 运行。也许我的代码会帮助有类似问题的人。 :)
using Microsoft.AnalysisServices;
string cubeServerName = args[1];
string cubeName = args[2];
Server server = null;
try
{
server = new Server();
server.Connect("Data source=" + cubeServerName + ";Timeout=7200000;Integrated Security=SSPI;");
}
catch (Exception e)
{
return (int)ExitCode.UnknownError;
}
string sqlServerName = args[3];
string user = args[4];
string pass = args[5];
string path = args[6];
string xmlaScript = "";
try
{
xmlaScript = System.IO.File.ReadAllText(@path);
}
catch (Exception e)
{
return (int)ExitCode.InvalidFilename;
}
if (server != null)
{
try
{
int exitCode = 0;
if (xmlaScript != "")
exitCode = ServerExecute(server, xmlaScript);
server.Disconnect();
return exitCode;
}
catch (Exception e)
{
return (int)ExitCode.UnknownError;
}
}
//...
private static int ServerExecute(Server server, string command)
{
XmlaResultCollection results = server.Execute(command);
foreach (XmlaResult result in results)
{
foreach (XmlaMessage message in result.Messages)
{
if (message is XmlaError)
{
Console.WriteLine("ERROR: {0}", message.Description);
return (int)ExitCode.UnknownError;
}
else
{
System.Diagnostics.Debug.Assert(message is XmlaWarning);
Console.WriteLine("WARNING: {0}", message.Description);
}
}
}
return (int)ExitCode.Success;
}
我正在寻找 运行 xmla 脚本(创建或删除多维数据集示例)的工具或简单方法。我曾经使用 Inno Setup
程序制作 exe 文件,在那里我可以编写命令,它可以 运行 另一个 exe 文件,就像在命令行中一样。
我发现有ascmd.exe
(Readme For Ascmd Command-line Utility Sample)这样的工具。但它曾用于旧版本的 MS SQL。 MS SQL Server 2012 和更新版本还有其他版本吗?
我可以说我没有使用 ascmd.exe
工具,因为我无法获得此工具(我无法从此处用 C# 编译项目:Readme For Ascmd Command-line Utility Sample)。
我建议您从以下网址下载 ASCMD_StressTestingScripts(其中包含 Ascmd.exe): https://sqlsrvanalysissrvcs.codeplex.com/releases
然后在与Ascmd.exe相同的目录下创建一个Ascmd.exe.config文件,内容如下。这将导致它使用 SQL 2014。如果你想要 SQL 2012,则将 12.0.0.0 更改为 11.0.0.0:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.AnalysisServices" publicKeyToken="89845dcd8080cc91" />
<bindingRedirect oldVersion="10.0.0.0" newVersion="12.0.0.0" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我用 C# 编写了自己的 exe 文件,我可以从命令行 运行。也许我的代码会帮助有类似问题的人。 :)
using Microsoft.AnalysisServices;
string cubeServerName = args[1];
string cubeName = args[2];
Server server = null;
try
{
server = new Server();
server.Connect("Data source=" + cubeServerName + ";Timeout=7200000;Integrated Security=SSPI;");
}
catch (Exception e)
{
return (int)ExitCode.UnknownError;
}
string sqlServerName = args[3];
string user = args[4];
string pass = args[5];
string path = args[6];
string xmlaScript = "";
try
{
xmlaScript = System.IO.File.ReadAllText(@path);
}
catch (Exception e)
{
return (int)ExitCode.InvalidFilename;
}
if (server != null)
{
try
{
int exitCode = 0;
if (xmlaScript != "")
exitCode = ServerExecute(server, xmlaScript);
server.Disconnect();
return exitCode;
}
catch (Exception e)
{
return (int)ExitCode.UnknownError;
}
}
//...
private static int ServerExecute(Server server, string command)
{
XmlaResultCollection results = server.Execute(command);
foreach (XmlaResult result in results)
{
foreach (XmlaMessage message in result.Messages)
{
if (message is XmlaError)
{
Console.WriteLine("ERROR: {0}", message.Description);
return (int)ExitCode.UnknownError;
}
else
{
System.Diagnostics.Debug.Assert(message is XmlaWarning);
Console.WriteLine("WARNING: {0}", message.Description);
}
}
}
return (int)ExitCode.Success;
}