1

我正在寻找运行 xmla 脚本的工具或简单方法(例如创建或删除多维数据集)。我曾经使用Inno Setup程序制作exe文件,在那里我可以编写可以运行另一个exe文件的命令,就像在命令行中一样。

我发现有这样的工具,例如ascmd.exeReadme For Ascmd Command-line Utility Sample)。但它用于旧版本的 MS SQL。MS SQL Server 2012 和更新版本还有其他的吗?

我可以说我没有使用ascmd.exe工具,因为我无法获得这个工具(我无法从这里用 C# 编译项目:Readme For Ascmd Command-line Utility Sample)。

4

2 回答 2

0

我建议您从以下网址下载 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>
于 2015-10-22T21:38:25.267 回答
0

我用 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;
}
于 2016-02-23T13:48:31.987 回答