如何从.net运行长SQL脚本?



我正在编写一个工具来自动执行一些dba任务。例如,Ola Hallengren (https://ola.hallengren.com/)有一些很棒的免费维护解决方案,Brent Ozar有一个令人惊叹的First Responder工具包,dba通常会为几乎所有雇佣他们的客户安装和运行该工具包。

我想自动化这个,但我遇到的问题是,我想以编程方式运行这些脚本,以便用户可以通过我的应用程序做任何事情,但它们比ExecuteNonQuery()可以处理的8k限制CommandTextSqlCommand大得多。

在这一点上,我最好的想法是将脚本分解成8k以下的块,并根据最接近的"go"来执行。语句在8k标记之前,然后以这种方式运行多个语句。

这是我最好的选择,还是有更好的方法?我很乐意用ADO.net、SMO或任何其他框架来处理这个问题(如果有的话)。

编辑:所以我的想法甚至不起作用,因为GO命令之间有超过8k的批次。

您能够使用存储过程吗?

然后您可以通过在应用程序中调用过程的名称来避免触及ExecuteNonQuery()可能施加的任何类型的字符限制。

您可以使用输入文件参数调用SQLCMD工具。您将没有文件大小的限制。

通过c#调用SQLCMD的参考文章

// Calls the sqlcmd
ProcessStartInfo info = new ProcessStartInfo("sqlcmd", @" -S .sqlexpress -i C:backup.sql");
//  Indicades if the Operative System shell is used, in this case it is not
info.UseShellExecute = false;
//No new window is required
info.CreateNoWindow = true;
//The windows style will be hidden
info.WindowStyle = ProcessWindowStyle.Hidden;
//The output will be read by the starndar output process
info.RedirectStandardOutput = true;
Process proc = new Process();
proc.StartInfo = info;
//Start the process
proc.Start();

相关内容

  • 没有找到相关文章

最新更新