在SQL Server中使用OLE DB运行多个Monsans或SQL脚本
-
30-09-2019 - |
题
可以使用OLE DB运行多个命令或SQL脚本吗?例如,运行SQL脚本以创建数据库及其结构(表,索引,存储过程...)。
当我使用CCommand类时,我只能运行一个命令。如何使用多个命令运行SQL脚本?
谢谢,马丁
解决方案
马丁 - 我也遇到了同样的问题。我认为,当您加载一个或多个“ go”脚本时,您会遇到错误?
我过去曾经使用过SQL DMO来运行Go中的脚本。这确实要求将SQLDMO安装在目标计算机上。
另一个选项是使用.net“ string.split(“ go”)”函数,然后循环产生的字符串数组,将它们一个接一个地删除。
像这样:
StreamReader file = File.OpenText("c:\\MyScript.sql");
SqlConnection conn = new SqlConnection("My connection string here...");
string fullCommand = file.ReadToEnd();
string[] splitOptions = new string[] {"go", "GO", "gO", "Go" };
foreach (string individualCommand in fullCommand.Split(splitOptions, StringSplitOptions.RemoveEmptyEntries))
{
SqlCommand comm = new SqlCommand(individualCommand, conn);
comm.ExecuteNonQuery();
}
免责声明:我尚未测试上述代码,但它应该让您了解所需的内容:-)
其他提示
将TSQL语句分开的GO命令不是SQL命令,而是前端识别的语句。
因此,在将结果传递给命令对象之前,您需要将脚本分为几个命令。
我已经发送了多个语句,例如插入到;插入到(SQL Server中不需要半隆。
某些语句(例如创建函数)必须是“批次”中的第一个语句。在SSM和SQLCMD中,您有一个GO分离器,这是用于分离批次的客户端工具。这不是OLEDB功能,因此您必须单独发送它们 - 在串联或并行的单独调用中(取决于您的操作是否可以同时运行)。
如果您可以摆脱CCOMMAND,我想您可以启动SQLCMD,因为它支持GO批次分离器。
不隶属于 StackOverflow