首页 > 解决方案 > Create/Alter 过程必须是查询批处理中的第一条语句

问题描述

我正在尝试使用 Visual Studio 中的代码SQL Script在我的文件夹中执行文件,在此之前它在我使用时工作正常,我最近安装并使用创建了脚本,当应用程序尝试执行脚本时出现错误binSQL Server 2012SQL server 2019SQL Server 2019

create/alter 过程必须是查询批处理中的第一条语句

我去找了一个朋友,SQL Server 2012他用他的电脑创建了脚本,它可以工作,但是当我用较新的版本创建它时,我得到了错误,这是我读取脚本文件的代码:

public static string ReadDBFile(string path)
{
     string str;
     StreamReader reader = new StreamReader(path);
     str = reader.ReadToEnd();
     str = str.Replace("GO", "");
     reader.Close();
     return str;
}

这是执行脚本文件的位置:

cmd.CommandText = ReadDBFile(Application.StartupPath + "/scriptfile.sql");
cmd.ExecuteNonQuery();

我确信这与升级有关SQL Server,关于如何让它工作的任何线索?

标签: c#sql-server

解决方案


读取数据库文件,替换\r\n\n,在字符串上拆分*"\nGO\n"并循环生成的数组,一一执行其中的语句

更像是:

public static string ExecBatchSql(string path)
{
    string f = File.ReadAllText(path).Replace("\r\n", "\n");
    string fs = f.Split(new[]{"\nGO\n"}, StringSplitOptions.RemoveEmptyEntries);

    foreach(string cmd in fs){

      SqlCommand c = new SqlCommand(cmd, connStr);
      c.ExecuteNonQuery();
    }
}
  • 注意:检查您的文件以确保 GO 单独出现在一行上,没有前导或尾随空格。如果是这样,请将您的拆分调整为更智能(可能必须使用正则表达式)

推荐阅读